ファイル内の文字列を見つけて、その単語を削除してサービスを再起動するbashシェルスクリプトを作成したいと思います。
私はこのコードを試しました
再起動.sh
#!/bin/sh
grep -q 'RestartServiceApache' /srv/www/config_apa
if [ $result -eq 1 ];
then
sed '/RestartServiceApache/d' "/srv/www/config_apa"
/etc/init.d/httpd reload
fi
そして私のconfig_apa
Hello my name is nutnud.
#RestartServiceApache
これは単なるテストファイルです。
エラーは次のとおりです。
./Restart.sh: line 3: [: -eq: unary operator expected
たくさんのスクリプトを試しましたが、うまくいきません。常にgrepできないというエラーが発生します。
答え1
Bourne Shellで終了コードのステータスを表示するには、次のものを使用できます。
$?
grepが行と一致する場合は0状態を提供し、一致しない場合は1状態を提供する必要があるようです(http://www.gnu.org/software/grep/manual/html_node/Exit-Status.html)、したがって終了コード0と一致しようとしています。
だからあなたはこれを行うことができます:
#!/bin/sh
grep -q 'RestartServiceApache' /srv/www/config_apa
if [ $? -eq 0 ];
then
sed '/RestartServiceApache/d' "/srv/www/config_apa"
/etc/init.d/httpd reload
fi
しかし、次の答えでより簡単な方法を見つけることができます。
grepはtrue / falseを返すことができますか?それとも別の方法がありますか?
if grep -q PATTERN file.txt; then echo found else echo not found fi
その行を削除してサービスを再起動するには、「エコー発見」部分をコードに置き換えます。
答え2
新しいGNU sed一行で完成
sed -i '/RestartServiceApache/{e\/etc/init.d/httpd reload
d}' /srv/www/config_apa