我创建了一个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脚本执行它时它不能正常工作。
答案 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 因为这会告诉脚本取变量的值而不是变量。