0

これが私のシェルスクリプトとそれを実行したときに私が得るエラーです:

#!/bin/bash

path=$1
execute=$2
a=$3
operation=$4
name=$5

if [ "$operation" == "run" ]; then
    cd $path
   ./$execute $a 
fi
elif [ "$operation" == "copy" ]; then
    mkdir -p $path
    cp $execute $path/$name 
fi
elif [ "$operation" == "delete" ]; then
     rm $path
     cd copy
     rm $name
     cd ..
     rmdir copy
fi
./commandsScript.sh: line 14: syntax error near unexpected token `elif'
./commandsScript.sh: line 14: `elif [ "$operation" == "copy" ]; then'

私は長い間、すべての種類のif-elseステートメントの差異を試してきましたが、エラーの解決策が見つかりませんでした。誰か助けてもらえますか?

4

2 に答える 2

4

1番目と2番目を削除しfiます。次のようになります

if ...
...
elif ...
...
elif ...
...
fi

詳細については、 Bash-条件付きコンストラクトを参照してください。

于 2013-01-05T22:35:07.437 に答える
4

caseチェーンされた一連のifステートメントの代わりに式を使用することを検討してください。

case "$operation" in
run)
    cd "$path"
    ./"$execute" "$a"
    ;; 
copy)
    mkdir -p "$path"
    cp "$execute" "$path/$name"
    ;;
delete)
    rm "$path"
    cd copy
    rm "$name"
    cd ..
    rmdir copy
    ;;
esac

また、自由にすべてのパラメーター展開を引用しました。これは、空白が埋め込まれた引数/変数に対してスクリプトを堅牢にするために習慣にすべきことです。

また、適切なエラー処理に投資することをお勧めします。

于 2013-01-05T23:56:33.487 に答える