实用的shell脚本-------修改cfg文件
2013-02-27 15:20
716 查看
1.用于修改 cfg文件的shell脚本:
#!/usr/bin/ksh
function cfg_update_sec_key_value
{
typeset file_name="$1"
typeset sec_name="$2"
typeset key_name="$3"
shift 3
typeset key_value
set -A key_value "$@"
typeset -i sec_line_start
typeset -i sec_line_end
typeset key_line_buf
##查找段所在的起始行和结束行
sec_line_start="`sed -n \"/^[ |${KEY_TAB}]*\[${sec_name}\]/=\" $file_name`"
sec_line_start="`echo $sec_line_start`"
((sec_line_start+=1))
sec_line_end="`sed -n \"$sec_line_start,/^[ |${KEY_TAB}]*\[.*\]/p\" $file_name | wc -l`"
sec_line_end="`echo $sec_line_end`"
((sec_line_end=sec_line_start+sec_line_end-1))
##处理键名中的[和]
typeset tmp_key_name="`echo $key_name | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g'`"
typeset tmp_file="${smdb_user_home}/tmp.tmp"
##查找键所在行并修改键值
typeset -i i=0
typeset line_no=1
typeset -i j=1 #指向当前行
typeset -i k=2 #指向当前域
typeset -i nf=0 #记录匹配行中以'#'符分隔的域数
typeset note="" #记录域信息
typeset note_temp=""
typeset line_max=`wc -l ${file_name}|awk '{print $1}'` #记录文本的行数
while [ "${j}" -le "${line_max}" ]
do
key_line_buf=`sed -n "${j}"p "${file_name}"` #读取行
if [ $line_no -ge $sec_line_start -a $line_no -le $sec_line_end ];then
echo "$key_line_buf" | grep "^[ |${KEY_TAB}]*$tmp_key_name[ |${KEY_TAB}]*=.*$" 1>/dev/null 2>&1
if [ $? -eq 0 ];then
nf=`echo "$key_line_buf"|awk -F# '{print NF}' 2>/dev/null`
if [ $nf -ge 2 ];then #行中含有注释
while [ $k -le $nf ]
do
note=`echo "$key_line_buf"|awk -F# -v y=$k '{print $y}'`
note_temp="${note_temp}#${note}"
((k+=1))
done
key_line_buf="$key_name=${key_value[i]} $note_temp"
((i+=1))
else #行中无注释
key_line_buf="$key_name=${key_value[i]}"
((i+=1))
fi
fi #end匹配成功,进行处理
fi #end在指定段中查找指定的键名$tmp_key_name
echo "$key_line_buf" >> $tmp_file #输出行
((line_no+=1))
((j+=1))
done
cp $tmp_file $file_name
rm -f $tmp_file
return 0
}
2.调用cfg_update_sec_key_value函数的方法:
cfg_update_sec_key_value “file” “section” “key” “value”
修改成功返回0,返回其他值为失败。
#!/usr/bin/ksh
function cfg_update_sec_key_value
{
typeset file_name="$1"
typeset sec_name="$2"
typeset key_name="$3"
shift 3
typeset key_value
set -A key_value "$@"
typeset -i sec_line_start
typeset -i sec_line_end
typeset key_line_buf
##查找段所在的起始行和结束行
sec_line_start="`sed -n \"/^[ |${KEY_TAB}]*\[${sec_name}\]/=\" $file_name`"
sec_line_start="`echo $sec_line_start`"
((sec_line_start+=1))
sec_line_end="`sed -n \"$sec_line_start,/^[ |${KEY_TAB}]*\[.*\]/p\" $file_name | wc -l`"
sec_line_end="`echo $sec_line_end`"
((sec_line_end=sec_line_start+sec_line_end-1))
##处理键名中的[和]
typeset tmp_key_name="`echo $key_name | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g'`"
typeset tmp_file="${smdb_user_home}/tmp.tmp"
##查找键所在行并修改键值
typeset -i i=0
typeset line_no=1
typeset -i j=1 #指向当前行
typeset -i k=2 #指向当前域
typeset -i nf=0 #记录匹配行中以'#'符分隔的域数
typeset note="" #记录域信息
typeset note_temp=""
typeset line_max=`wc -l ${file_name}|awk '{print $1}'` #记录文本的行数
while [ "${j}" -le "${line_max}" ]
do
key_line_buf=`sed -n "${j}"p "${file_name}"` #读取行
if [ $line_no -ge $sec_line_start -a $line_no -le $sec_line_end ];then
echo "$key_line_buf" | grep "^[ |${KEY_TAB}]*$tmp_key_name[ |${KEY_TAB}]*=.*$" 1>/dev/null 2>&1
if [ $? -eq 0 ];then
nf=`echo "$key_line_buf"|awk -F# '{print NF}' 2>/dev/null`
if [ $nf -ge 2 ];then #行中含有注释
while [ $k -le $nf ]
do
note=`echo "$key_line_buf"|awk -F# -v y=$k '{print $y}'`
note_temp="${note_temp}#${note}"
((k+=1))
done
key_line_buf="$key_name=${key_value[i]} $note_temp"
((i+=1))
else #行中无注释
key_line_buf="$key_name=${key_value[i]}"
((i+=1))
fi
fi #end匹配成功,进行处理
fi #end在指定段中查找指定的键名$tmp_key_name
echo "$key_line_buf" >> $tmp_file #输出行
((line_no+=1))
((j+=1))
done
cp $tmp_file $file_name
rm -f $tmp_file
return 0
}
2.调用cfg_update_sec_key_value函数的方法:
cfg_update_sec_key_value “file” “section” “key” “value”
修改成功返回0,返回其他值为失败。
相关文章推荐
- shell脚本判断linux文件修改时间后执行操作
- shell脚本修改配置文件中的内容
- Shell脚本实现检测文件是否被修改过代码分享
- Linux的简单shell脚本中修改文件操作
- Linux的简单shell脚本中修改文件操作
- Shell脚本遍历目录并批量修改文件编码
- Shell脚本实现根据文件的修改时间来分类文件
- shell脚本批量修改目录下所有文件中的部分语句
- shell脚本采用sed批量修改文件
- Mac下通过shell脚本修改properties文件
- shell脚本:修改包含特定内容的多个文件
- linux通过shell脚本修改文件内容
- shell脚本:批量修改文件扩展名
- shell脚本批量修改目录下所有文件中的部分语句
- shell 脚本实现的遍历目录修改子目录及其文件权限
- shell修改配置文件脚本
- shell数组及random相关应用和批量修改建立用户,检查文件篡改脚本
- Shell脚本遍历目录并批量修改文件编码
- Linux下批量修改文件后缀名及shell脚本中匹配文件名称变量写法
- 通过shell脚本修改xml文件中的某行记录