2016-11-23 8 views
0

처음 여기에서 질문을하고 배쉬를 배워야하므로 나와 함께하시기 바랍니다.while 및 case를 사용하여 Bash 스크립트 오류가 발생했습니다.

while과 case를 사용하여 주 화면을 만들었지 만 작동하지 않아서 실수 한 부분을 알 수 없습니다.


while [ $WH!=5 ] 
do 

echo "Choice menu:" 
echo "   1) Option 1" 
echo "   2) Option 2" 
echo "   3) Option 3" 
echo "   4) Option 4" 
echo "   5) End script" 
echo -n "Choose an option: " 
read $OP 

case $OP in 
     1) 
      # code;; 

     2) 
      # more code;; 

     3) 
      # more code;; 

     4) 
      # even more code;; 

     5) 
      echo "Thank you for testing this script!" 
      $WH=5;; 
esac 
done 

은 아무리 $OP에 넣어 무엇을, 스크립트는 내가 그것을 취소 할 때까지 선택 메뉴를 반복 유지합니다. 나는 움직이고있는 동안 조건으로서의 $OP를 사용했다. 그러나 아무것도 일하는 것처럼 보였다.

+0

'읽기 $ OP'가 아니라 '읽기 OP'여야합니다. –

+1

'while '조건도 잘못되었습니다 ('! ='주위에 공백이 필요합니다) - https://www.shellcheck.net/은 그런 것들을 알려줍니다. –

+0

이렇게하면 도움이 될 것입니다 : [bash 스크립트 디버깅 방법] (http://unix.stackexchange.com/q/155551/74329) – Cyrus

답변

2

당신은 스크립트에서 여러 문제를 가지고있다 -

  1. while 구조는 while [ "$WH" != 5 ] 할 필요가있다. 모든 쉘 변수를 큰 따옴표로 묶으십시오.
  2. read 명령은 read OP
  3. case 구조가 최종 할당 문이 WH=5 있어야 할이 ;;
  4. 을 끝으로이어야 한 줄 필요
  5. 하지 $WH=5

사용 https://www.shellcheck.net는 사소한 문제를 디버깅 할 수 있어야한다 .

+1

좋아요, 모든 것을 고칠 수있었습니다. 정말 고마워요! – washedaway

+0

몇 가지 일반적인 규칙 : '$'를 사용하여 변수의 값을 가져오고, * 값을 설정하지 않을 때는 *; 변수 참조 ('$ WH' 대신''$ WH "')를 둘러싼 큰 따옴표를 사용하십시오. 공백은 셸에서 엄청난 양 (예 :'! ='주변) 일 것입니다. 아, 그리고 하나 더 : 소문자 변수 이름을 사용하는 것이 가장 좋습니다. 쉘 및/또는 다른 프로그램 (모두 대문자)에 특별한 의미가있는 변수와의 충돌을 피하십시오. –