条件付きで変数を割り当てたい。
これはうまくいきません
[[ -v $2]] && [$2 == "init" ] && command="./ops/init.sh"
[[ -v $2]] && [$2 == "destroy" ] && command="./ops/teardown.sh"
[ -z "${2}" ] && command="./ops/help.sh -h"
パラメータとは異なる条件が存在するかどうかを確認しようとしていますが、構文が正しくわかりません。
答え1
最初のもの-v
はzsh拡張なので、問題はスクリプトを実行している間違ったシェルかもしれません。
これを書くための一般的な方法は、Caseステートメントを使用することです。
case "$2" in
("init") command="./ops/init.sh" ;;
("destroy") command="./ops/teardown.sh" ;;
("") command="./ops/help.sh -h" ;;
(*) echo "$0: unknown option '$2' - expecting 'init' or 'destroy'" >&2
exit 2 ;;
esac
複数の単語を文字列に入れることは最善のアイデアではありませんが、そうする必要はありません./ops/help.sh -h
(そして最初はシェルに対して選択肢はありません)。代わりに配列の使用を検討してください。
答え2
シェルスクリプトでは、スペースに非常に注意する必要があります。あなたも知らなければなりません[
との違い[[
。不明な場合は bash(1) のマニュアルを参照してください。私はお勧めします住宅検査スクリプトで一般的なエラーを検出します。あなたの場合:
#!/bin/bash
[[ -v $2 && $2 = "init" ]] && command="./ops/init.sh"
[[ -v $2 && $2 = "destroy" ]] && command="./ops/teardown.sh"
[[ -z $2 ]] && command="./ops/help.sh -h"
しかし、イカルスが言ったように、case
声明をする方が良いです。