sed无法使用bash脚本

时间:2016-12-16 12:43:12

标签: linux shell sed scripting redhat

我创建了一个bash脚本,用于修改RHEL服务器中打开文件的ulimit。

所以我已经阅读了文件/etc/security/limits.conf中的行,如果打开文件的软/硬限制小于10000,那么' *' domain我正在评论该行,并添加一个软/硬限制为10000的新行。

脚本按设计工作,但是在脚本中注释一行的sed命令无效。

请在下面找到完整的脚本: -

#!/bin/sh
#This script would be called by '' to set ulimit values for open files in unix servers.
#
configfile=/etc/security/limits.conf
help(){
echo "usage: $0 <LimitValue>"
echo -e "where\t--LimitValue= No of files you want all the users to open"
exit 1
}
modifyulimit()
{
grep '*\s*hard\s*nofile\s*' $configfile | while read -r line ; do
        firstChar="$(echo $line |  xargs | cut -c1-1)"
        if [ "$firstChar" != "#" ];then
        hardValue="$(echo  $line | rev | cut -d ' ' -f1 | rev)"
            if [[ "$hardValue" -ge "$1" ]]; then
            echo ""
            else
            sed -i -e 's/$line/#$line/g' $configfile 
            echo "*          hard     nofile         $1" >> $configfile
            fi
        else
            echo ""
        fi
    done

grep '*\s*soft\s*nofile\s*' $configfile | while read -r line ; do
        firstChar="$(echo $line |  xargs | cut -c1-1)"
        if [ "$firstChar" != "#" ];then
        hardValue="$(echo  $line | rev | cut -d ' ' -f1 | rev)"
            if [[ "$hardValue" -ge "$1" ]]; then
            echo ""
            else
            sed -i -e 's/$line/#$line/g' $configfile 
            echo "*          hard     nofile         $1" >> $configfile
            fi
        else
            echo ""
        fi
    done
}
deleteEofTag(){
sed -i "/\b\(End of file\)\b/d" $configfile
}
addEofTag()
{
echo "#################End of file###################" >> $configfile
}
#-------------Execution of the script starts here ----------------------
if [ $# -ne 1 ];
then
help
else
modifyulimit $1
deleteEofTag
addEofTag
fi

命令sed -i -e&#39; s / $ line /#$ line / g&#39; $ configfile从终端执行时工作得很好,它正在注释该行,但是当我从unix shell脚本执行它时它不能正常工作。

2 个答案:

答案 0 :(得分:0)

插值在单引号中不起作用 使用双引号并尝试

sed -i -e's / $ line /#$ line / g'

sed -i -e "s/$line/#$line/g"

答案 1 :(得分:0)

你也可以试试:     sed -i -e s / $ {line} /#$ {line} / g 因为这会告诉脚本取变量的值而不是变量。