我正在编写一个脚本来改变sysctl.conf
/etc directory
中的几个值
如果变量值小于该值,则应将该值更改为低于给定值
例如:
sysctl.conf
文件包含以下行(括号中的术语是我自己的注释,不在实际文件中):
kernel.shmall = 5194304 (more than 4194304 so it should leave it as it is)
kernel.shmmax = 2147483648 (it is equal to 2147483648 so it should leave it as it is)
kernel.msgmni = 124 (it is less than 1024 so it should alter the value to 1024)
期待输出
kernel.shmall = 5194304
kernel.shmmax = 2147483648
kernel.msgmni = 1024
这是我的脚本如果值小于或等于kernel.shmall
,我准备替换4194303
脚本:
#!/bin/sh
echo `cat /etc/sysctl.conf|fgrep kernel.shmall` | while read kernel.shmall
if [ "kernel.shmall" -le 4194303 ]; then
kernel.shmall = 4194304
fi`
答案 0 :(得分:2)
你可以做这样的事情
sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf
同样可以用于其他属性。
如果属性不存在,那么你可以这样做
if grep -o "kernel.shmall" /etc/sysctl.conf > /dev/null
then
oldvalue=$(grep kernel.shmall /etc/sysctl.conf | awk '{ print $3 }')
if [ $oldvalue -lt 4194304 ]
then
sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf
fi
else
echo "kernel.shmall=" >> /etc/sysctl.conf
sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf
fi
答案 1 :(得分:1)
从您的文件中获取值的更简洁方法可能是:
value=$(grep kernel.shmall /etc/sysctl.conf | awk '{ print $3 }')
然后,替换文件中的值:
sed -i "/kernel.shmall =/ s/$value/4194304/" /etc/sysctl.conf