2012-11-09 4 views
-1

저는 프로그래밍에 익숙하지 않고 UNIX에서 쉘 스크립트 프로그램을 코딩하는 동안 구문 오류가 발생합니다. 사용자가 쉘 스크립트가 실행되면 내장 명령을 사용하여 작성, 삭제 및 백업 할 수있는 데이터베이스를 작성하려고합니다.98 행 : 예기치 않은 토큰`else '근처에서 구문 오류가 발생했습니다.

그러나 if 문이나 while 루프를 사용할 때마다 문제가 발생합니다. 특히 중첩 루프를 포함하여 둘 다의 조합을 사용할 때마다 "완료"또는 "fi"를 배치 할 위치를 더 구체적으로 지정합니다. 좋아, 여기있다.

> #!/bin/bash 
> 
> 
> echo "*****Welcome to User Administration Program*****" 
> 
> for ((i=0;i<3;++i)) 
> #for i in `seq 1 3` 
> do 
> 
> count=`expr $count + 1` 
> echo -n "Please enter adminstrative username: " 
> read input 
> if [ $input == admin ]; then 
> break 
> if [ $count -eq 3 ]; then 
> break fi fi done 
> 
> 
> #so far so good 
> 
> echo "Welcome admin!" echo -n "[[email protected]]$ " read userin 
> while [ "$userin" = "createuser" -o "$userin" = "deleteuser" -o 
> "$userin" = "ba$ do 
>  command1="createuser" 
>   command2="deleteuser" 
>   command3="backup" 
> 
> if [ "$userin" = "$command1" ]; then 
>   echo "Please enter a username " 
>   echo -n "[[email protected]]$ " 
> 
> read username while read line do if [ "$username" = "$line" ]; then 
> #not reading lines correctly 
>   echo "$line is taken! choose another" else 
>  newUser="$username" 
>   echo -n "Hello $newUser ! , enter password " 
>   read passEntered 
>   newPass="$passEntered" 
>   echo $newUser $newPass >> userdb 
>   echo "Thank you for creating password, $newUser !" <"userdb" echo "Program terminated!" exit fi done 
> 
> #create user works and is completed, with exception of minor error 
> 
> elif [ "$userin" == "$command2" ]; then echo "Which user do you wish 
> to delete?" echo -n "[[email protected]]$ " while read delete do 
>   username=$(echo $delete | cut -d" " -f2) 
>   usernameExists=$(grep -w -c $username userdb) 
>   sed -i '/$username:/d' userdb 
> 
> 
> 
> if [ "$delete" == "admin" ]; then 
>   echo "You do not have necessary powers to perform this action." 
>   echo "Try again!" else command=$(echo $input | cut -d" " -f1) 
> 
> dir=$(echo $input | cut -d" " -f2) fi done 
> 
> 
> elif [ "$userin" == "$command3" ]; then 
>   echo "How do you wish to backup?" echo -n "[[email protected]]$ " while read input do backup=true if [ 
> "$input" != "$BACKUP" ]; then echo "Invalid command! Try again" fi 
> 
> else #where error is happening echo "Invalid command. Please Try 
> again!" fi done 
+2

그건 정말 끔찍한 코드 형식입니다. 줄 바꿈은 sh 스크립트에서 의미가 있지만, 무작위로 입력하거나 생략하는 것 같습니다. 질문에서 인용 한 스크립트가 실행중인 스크립트와 실제로 일치합니까? 'else' 라인보다 오래 전에 문제가 생기는 것 같습니다. –

답변

0

당신은 done 누락 것은 지난 while에 맞게,하지만 저조한 형식의 코드 내에서 묻혀 있기 때문에 당신은 그것을 볼 수 없습니다.

코드를 다시 포맷하고 echo 문 앞에 줄 바꿈을 추가하고 올바르게 들여 쓰기를 시도하십시오.

+0

의견에 감사드립니다. 아주 늦은 답장을 드려서 죄송합니다. 형식에 대해 사과드립니다. 터미널에서이 페이지까지의 복사/붙여 넣기 프로세스와 관련이 있으며 UNIX의 실제 코딩 레이아웃이 아닙니다. 도와 주셔서 다시 한 번 감사드립니다! – user1801053

관련 문제