-1

私はプログラミングにかなり慣れていないので、UNIXでシェルスクリプトプログラムをコーディングしているときに構文エラーが発生します。シェルスクリプトが実行されると、ユーザーが組み込みコマンドを使用して作成、削除、およびバックアップできるデータベースを作成しようとしています。

ただし、ifステートメントまたはwhileループを使用するたびに問題が発生します。より具体的には、ネストループを含め、両方の組み合わせを使用している場合は常に、「done」または「fi」を配置する場所です。OK、ここに行きます。

> #!/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 "[administator@shell]$ " 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 "[administrator@shell]$ "
> 
>  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 "[administrator@shell]$ " 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 "[administrator@shell]$ " 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
4

1 に答える 1

0

done最後の に一致するawhileがありませんが、フォーマットが不十分なコードに埋もれているため、表示できません。

コードを再フォーマットして、ステートメントの前に改行を追加し、echo適切にインデントしてみてください。

于 2012-11-09T19:54:12.863 に答える