他の単純なコマンドと同じように、[ ... ]またはtest引数の間にスペースが必要です。
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
または
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
提案
Bashでは[[ ]]、変数の単語分割やパス名拡張を行わないため、代わりに使用することをお勧めします。式の一部でない限り、引用は必要ない場合があります。
[[ $# -ne 1 ]]
また、引用符で囲まれていない条件のグループ化、パターンマッチング(を使用した拡張パターンマッチングextglob)、正規表現マッチングなどの機能もあります。
次の例では、引数が有効かどうかを確認します。引数は1つまたは2つです。
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
純粋な算術式については、使用して(( ))いくつかのことはまだ良いかもしれないが、彼らはまだ可能であり、[[ ]]同様にその算術演算子と-eq、-ne、-lt、-le、-gt、または-ge単一の文字列引数として式を配置することによって:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
[[ ]]同様に他の機能と組み合わせる必要がある場合に役立ちます。
スクリプトを終了する
無効なパラメーターがスクリプトに渡されたときにスクリプトを終了させることも論理的です。これは、すでに示唆されているコメントでekangas誰かがして、それを持って、この答えを編集した-1私も右のそれを行う可能性がありますので、戻り値として。
-1ただし、Bashの引数として受け入れられていることexitは明示的に文書化されておらず、一般的な提案として使用することはできません。 64で定義されsysexits.hて#define EX_USAGE 64 /* command line usage error */いるため、最も正式な値でもあります。のようなほとんどのツールは、無効な引数をls返し2ます。以前2はスクリプトで戻ることもありましたが、最近はあまり気にせず、単に1すべてのエラーで使用しました。ただし2、これは最も一般的で、おそらくOS固有ではないため、ここに配置します。
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
参考文献
test。これは、標準のUnixコマンドの名前です。シャドウする必要はありません。