Здравствуйте! Недавно начал учится писать скипты и не всё ещё получается, прошу помочь с проблемой.
Необходимо в файле найти и заменить строку в определённом блоке файла. Файл разделён на блоки.Пример файла :
[1]
rule= 1 ip icmp all la la la la
[2]
rule= 1 ip icmp all la la la la
rule= 2 vpn to all la la la la
[3]
rule= 1 ftp ip vpn la la la la
Входящими параметрами получается будет: путь файлы для редактирования блок в котором надо изменить старая строка новая строка.
написал не до конца скрипт, дальше не смог :((
#!/bin/bash
#param1 = /etc/user/f.conf
#param2 = editing block [example]: 1
#param3 = newRule [exaple]: rule= num 2 icmp from ip
#param4 = oldRule [exaple]: rule= num 3 icmp from ip to
Filelocation=$1
shift
Block=$1
shift
newRule=$1
shift
oldRule=$@
error_exit() {
echo $@
exit 1
return 1
}
backup_orig_file() {
backup_dir=`echo "/backup/orig_file"`
mkdir -p $backup_dir || error_exit "Directory $backup_dir not created"
cp $1 $backup_dir
return 0
}
insert_line() {
Filelocation=$1
shift
Block=$1
shift
newRule=$1
shift
oldRule=$@
Block_line_num=`cat $Filelocation | grep -n $Block | cut -d ":" -f 1`
old_line_num=`cat $Filelocation | grep -n $oldRule | cut -d ":" -f 1`
###############################
if [old_line_num>Block_line_nem && мы не дошли до след. блока "[" или не дошли до eof ];then
на место old_lline_num вставить newRule
###############################
else
if [ old_line_num!= 0 ]; then
else
echo "Rule not found in the Block :---- $Block -----"
fi
fi
ruturn 0
}
if [ -e $Filelocation ]; then
echo "File exist"
else
echo "File $FILE_NAME not exist"
exit 1
fi
case "$Block" in
1) echo "1 selected";shift;;
2) echo "2 selected";shift;;
3) echo "3 selected";shift;;
4) echo "4 selected";shift;;
5) echo "5 selected";shift;;
6) echo "6 selected";shift;;
7) echo "7 selected";shift;;
*) echo "Selection not recognized"; exit 1;;
esac
backup_orig_file $Filelocation
insert_line $Filelocation $Block $newRule $oldRule
exit 0