我想创建 bash shell 脚本,它可以 - 在文件中查找字符串 - 然后删除单词 - 然后重新启动服务
我已经尝试过这段代码
重启.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
但是,可以在以下答案中找到更简单的方法:
if grep -q PATTERN file.txt; then echo found else echo not found fi
将“echo found”部分替换为您的代码以删除该行并重新启动服务。
答案2
与新GNU sed一行即可完成
sed -i '/RestartServiceApache/{e\/etc/init.d/httpd reload
d}' /srv/www/config_apa