쉘 프로그래밍 while문 done에서 에러가 뜹니다
글쓴이: ehddms10 / 작성시간: 화, 2022/05/10 - 11:13오후
while문 do 2개에 done2개 문제가 없는데 자꾸 마지막 done에서 syntax errer unexpected token done 이 뜹니다 원래는 첫번째 done에서 에러가 났는데 뭐 건드린거도 없는거같았는데 마지막거로 옮겨갔습니다. 실행 자체가 안됩니다 이것 참 모르겠네
selectsignin() { while : do read -s -N1 input if [ "$input" = "" ] then read -s -n 1 input if [ "$input" = "[" ] then read -s -n 1 input if [ "$input" = "B" ] && [ $statesn == 1 ] then pw elif [ "$input" = "C" ] && [ $statesn == 1 ] then dc elif [ "$input" = "A" ] && [ $statesn == 2 ] then id elif [ "$input" = "B" ] && [ $statesn == 2 ] then sn elif [ "$input" = "B" ] && [ $statesn == 3 ] then ex elif [ "$input" = "D" ] && [ $statesn == 3 ] then id elif [ "$input" = "A" ] && [ $statesn == 4 ] then pw elif [ "$input" = "C" ] && [ $statesn == 4 ] then ex elif [ "$input" = "A" ] && [ $statesn == 5 ] then dc elif [ "$input" = "D" ] && [ $statesn == 5 ] then sn fi fi elif [ "$input" = "$enter" ] && [ $statesn == "5" ] then exit elif [ "$input" = "$enter" ] && [ $statesn == "1" ] then echo -e "\033[6A" echo -n " " echo -n [41m " " [0m echo -n " " echo [44m " Duplicate check " [0m echo "" echo -n " " echo -n [44m " " [0m echo "" echo "" echo -n " " echo -n [44m " SIGN IN " [0m echo -n " " echo -n [44m " EXIT "[0m echo "" if [ ! -e "userid1.txt" ]#7 then touch userid1.txt echo -e "\033[6A" echo -n " " echo -n [41m echo -n " " read userid echo -n [0m echo -n -e "\033[0B" echo -n " " echo -n [41m echo -n " " read userpw echo -e -n "\033[1B" echo -n [0m " " echo -n [41m " SIGN IN " [0m read -s -N1 input if [ "$input" = "$enter" ]#6 then userid > userid1.txt userpw >> userid1.txt fi#6 else touch userid2.txt echo -e "\033[6A" echo -n -e "\033[10C" echo -n [44m read userid echo -n [0m echo -e -n "\033[1A" echo -n -e "\033[26C" echo [41m " Duplicate check " [0m read -s -N1 input if [ "$input" = "$enter" ] then while read line do if [ "$line" = "userid" ] then echo -e -n "\033[6B" echo "sign in OK" exit else echo -e -n "\033[6B" echo "sign in X" exit fi done elif [ "$input" = "" ] then read -s -n 1 input if [ "$input" = "[" ]#4 then read -s -n 1 input if [ "$input" = "D" ]#3 then echo "" echo -n " " echo -n [41m " " echo -n -e "\033[11D" read userpw echo -n [0m echo -n -e "\033[1B" echo -n " " echo [41m " SIGN IN " read -s -N1 input if [ "$input" = "$enter" ] then touch userid2.txt userid > userid2.txt userpw >> userid2.txt exit fi fi fi fi fi fi done }
Forums:
#6 주석이 fi 키워드와 붙어있어서
#6 주석이 fi 키워드와 붙어있어서 키워드가 제대로 인식되지 못하고 있습니다. 그 결과로 함수내의 문장구조가 제대로 닫히지 않게 된 것이고요. #앞에 공백 하나라도 넣으면 되며, 아래의 vim 명령 정도면 해결될 겁니다.
그리고, 동작과는 상관없지만 전반적으로 들여쓰기가 좀 부자연스러운 것 같습니다. if문 내에서 다시 if문이 등장하고 그 if문 안에서 또 if문이 등장하는데 들여쓰기는 세 개의 if문이 다 같은 깊이로 돼있다든지... 등 읽기 힘든 코드가 되기 쉽겠다 싶네요.
아 감사합니다 가상머신으로 하다보니까 들여쓰기를 하면
아 감사합니다 가상머신으로 하다보니까 들여쓰기를 하면 창이 작아서 자꾸 잘리더라구요 그래서 들여쓰기를 거지같이 하니까 잘 보이지도 않고 그래서 주석 달아가면서 했는데 오히려 그게 독이 됐네요 ㅠㅠ 너무감사합니당
tip
어지간한 텍스트 에디터는 tab 하나를 space 몇 개 너비로 할 것인지 설정하는 옵션이 있습니다.
4 정도가 무난하고, 화면이 가로로 작거나 들여쓰기 레벨이 깊을 경우 2까지도 설정해 볼 만 합니다.
저도 가상머신에서 작업하는 경우가 종종 있는데요,
저도 가상머신에서 작업하는 경우가 종종 있는데요, 가상머신의 콘솔에서 직접 쓰려면 여러가지로 불편이 따르다보니 늘 putty 등 ssh 클라이언트를 통해 접속해서 씁니다. 불가피하게 콘솔을 쓰셔야 하는 상황이 아니라면 이런 방식 추천합니다.
댓글 달기