쉘 프로그래밍 while문 done에서 에러가 뜹니다

ehddms10의 이미지

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
}
chanik의 이미지

#6 주석이 fi 키워드와 붙어있어서 키워드가 제대로 인식되지 못하고 있습니다. 그 결과로 함수내의 문장구조가 제대로 닫히지 않게 된 것이고요. #앞에 공백 하나라도 넣으면 되며, 아래의 vim 명령 정도면 해결될 겁니다.

:1,$s/#[0-9]\+/ &/

그리고, 동작과는 상관없지만 전반적으로 들여쓰기가 좀 부자연스러운 것 같습니다. if문 내에서 다시 if문이 등장하고 그 if문 안에서 또 if문이 등장하는데 들여쓰기는 세 개의 if문이 다 같은 깊이로 돼있다든지... 등 읽기 힘든 코드가 되기 쉽겠다 싶네요.

ehddms10의 이미지

아 감사합니다 가상머신으로 하다보니까 들여쓰기를 하면 창이 작아서 자꾸 잘리더라구요 그래서 들여쓰기를 거지같이 하니까 잘 보이지도 않고 그래서 주석 달아가면서 했는데 오히려 그게 독이 됐네요 ㅠㅠ 너무감사합니당

익명 사용자의 이미지

어지간한 텍스트 에디터는 tab 하나를 space 몇 개 너비로 할 것인지 설정하는 옵션이 있습니다.

4 정도가 무난하고, 화면이 가로로 작거나 들여쓰기 레벨이 깊을 경우 2까지도 설정해 볼 만 합니다.

chanik의 이미지

저도 가상머신에서 작업하는 경우가 종종 있는데요, 가상머신의 콘솔에서 직접 쓰려면 여러가지로 불편이 따르다보니 늘 putty 등 ssh 클라이언트를 통해 접속해서 씁니다. 불가피하게 콘솔을 쓰셔야 하는 상황이 아니라면 이런 방식 추천합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.