2016-12-20 1 views
1

간단한 bash 스크립트를 작성하려고합니다. (방금 bash 스크립팅 작업을 시작했습니다.) 스크립트가 간단합니다. rsyslog 서비스에 문제가 있으며 수시로 사망합니다. 서비스가 다시 시작되도록하려면 스크립트를 다시 작성해야합니다. 지금까지는 내 조건이 정상인지 확인하고 싶지만 오류가 발생하는 것 같습니다. 너 나 한테 조언 해 줄 수있어?내 bash 스크립트를 작성하려고합니다.

#!/bin/bash 
a="dead" 
b="running" 
while i in $(/etc/init.d/rsyslog status | grep -o 'running\|dead'); 
do 
if 
[ "$a" == "$i" ]; 
then 
echo "service rsyslog is dead " 
if 
[ "$b" == "$i" ]; 
then 
echo "service rsyslog is running" 
else 
echo "nothing to do"; 
fi; 
done 
------------- 

나는 다음과 같은 구문 오류가 점점 오전 : 여기

는 스크립트입니다.

./rsyslogcheck.sh : 17 행 : 구문 오류가 예기치 않은 토큰 done' ./rsyslogcheck.sh: line 17: 근처는

가 사전에 감사합니다 '완료!

+5

https://www.shellcheck.net을 통해 실행하십시오. 첫 번째'if'에는 'fi'가 없습니다. –

+0

명령문/명령을 분리하기 위해 세미콜론 (';') *과 * 개행 문자를 모두 사용할 필요는 없습니다. –

+0

'for' 루프와'while' 루프를 혼동하는 경우도 있습니다. 'bash'에는'in '연산자가 없습니다; 'in'은'foreach'을 "철자"하기 위해 사용되는 키워드 일뿐입니다. – chepner

답변

1

몇 가지 문제는 여기에 있습니다 :

  • 잘못된 while 루프 구문
  • 불필요한 루프 : 당신이
  • 을 열었다 된 iffi을 닫는 누락 된 모든
  • 에서 루프를 필요로하지 않는 것 같다

다음과 같은 것을 찾고 있다고 가정 해 보겠습니다.

#!/bin/bash 
status=$(/etc/init.d/rsyslog status | grep -o 'running\|dead') 
case "$status" in 
dead) echo "service rsyslog is dead";; 
running) echo "service rsyslog is running";; 
*) echo "nothing to do";; 
esac 
관련 문제