此shell脚本中需要修改以添加文件中不存在的值

时间:2014-04-23 13:12:55

标签: linux shell

我正在编写shell脚本来检查“kernel.shmall”值。脚本的目的是如果kernel.shmall小于4194304那么它应该将值修改为4194304.如果kernel.shmall不存在文件/etc/system.conf那么它应该将值添加到文件kernel.shmall = 4194304 < / p>

if grep -o "kernel.shmall" /emblocal/sysctl.conf > /dev/null
then
     oldvalue=$(grep -v '^#' /emblocal/sysctl.conf|grep kernel.shmall|sed 's/=/ /g'| awk '{ print $2}')

     if [ $oldvalue -lt 4194304 ]
     then
        sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /emblocal/sysctl.conf
     fi
else
     echo "kernel.shmall=" >> /emblocal/sysctl.conf
     sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /emblocal/sysctl.conf
fi
如果值小于4194304,则

脚本正在运行,但如果不存在则不添加“kernel.shmall = 4194304”。你可以帮助我完成它吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

#!/bin/sh
oldvalue=$(sed '/^#/d;/kernel\.shmall/!d;s/^[^=]*= *//' /emblocal/sysctl.conf)
if [ "$oldvalue" ]; then
    [ $oldvalue -lt 4194304 ] &&
    sed -i '/kernel\.shmall/{s/=.*/= 4194304/}' /emblocal/sysctl.conf
else
    echo "kernel.shmall = 4194304" >> /emblocal/sysctl.conf
fi

或者在AWK中更简洁:

f=$(mktemp)
awk -vn=kernel.shmall '
    function max(a,b) {return a<b?b:a}
    {
        if ($1 == n) oldval = $3
        else print
    }
    END {print n, "=", max(oldval, 4194304)}
    ' /emblocal/sysctl.conf > "$f" && cp "$f" /emblocal/sysctl.conf
rm "$f"