...
sed -i -e "/^$key =/ s#= .*/# $value#" $config
sed工具已经考虑过这样的特殊字符操作,不需要使用转义符就可以轻松实现行编辑。
现在我们的脚本改进如下:
function config_set_key_value() {
local config=$1
local key=$2
local value=$3
sed -i -e "/^$key =/ s#= .*#= \"$value\"#" $config
if grep "$key = \"$value\"" $config;then
echo "config $config set $key as $value SUCCESS" > /dev/null
else
echo "append set $key as $value to config $config" > /dev/null
echo "$key = \"$value\"" >> $config
fi
}
config_set_key_value /etc/libvirt/qemu.conf auto_dump_path /myapp/qemu/dump
function config_set_key_value() {
local config=$1
local key=$2
local value=$3
# check value is number or character (number is integer)
if [ "$value" -eq "$value" ] 2>/dev/null;then
echo "value is number" > /dev/null
else
value="\"$value\""
fi
# check config "=" rear " ", if exist " ", same set config value as same
value_char1=`grep -v "^#" $config | grep -v "^$" | tail -1 | awk -F= '{print $2}' | cut -c1`
if [ "$value_char1" = " " ];then
key="$key "
value=" $value"
else
echo "no change $key and $value" > /dev/null
fi
sed -i -e "/^$key=/ s#=.*#=$value#" $config
check_line=`grep ^$key $config`
set_line="$key=$value"
if [ "$check_line" = "$set_line" ];then
echo "config $config set $key as $value SUCCESS" > /dev/null
else
echo "append set $key as $value to config $config" > /dev/null
echo "$key=$value" >> $config
fi
}
config_set_key_value /etc/sysconfig/grub GRUB_TIMEOUT 10
config_set_key_value /etc/libvirt/qemu.conf auto_dump_path /myapp/qemu/dump