2016-12-16 9 views
1

RHELサーバーで開いているファイルのulimitを変更するためのbashスクリプトを作成しました。sedがbashスクリプトを使用してファイル内の行にコメントを作成していない

私はファイル/etc/security/limits.confの中の行を読んでいます。開いているファイルのソフト/ハード制限が '*'ドメインの10000未満であれば、私はその行にコメントして、ソフト/ハード制限が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さん/ $ライン/#$行/ G 'の端末から実行$ configfileを絶対に正常に動作しているとそれは行をコメントしていますが、私がUNIXシェルスクリプトから実行しているときにはうまくいきません。

答えて

0

補間は、単一引用符 使用二重引用符で作業してみません

のsed -i -eさん/ $ライン/#$行/ G 'も

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

ありがとうございました。 :) –

0

あなたはしようとする可能性があります: sed -i -es/$ {line} /#$ {line}/g これは変数の代わりに変数の値を取るようにスクリプトに指示します。

関連する問題