파일에서 문자열을 찾은 다음 해당 단어를 제거한 다음 서비스를 다시 시작하는 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