必要な引数の数が満たされていない場合は、Bashスクリプトにエラーメッセージを表示させます。
私は次のコードを試してみました:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
いくつかの未知の理由で、私は次のエラーが出ました:
test: line 4: [2: command not found
何がおかしいのですか?
他の単純なコマンドと同様に、[ ... ]
またはtest
では、引数間にスペースが必要です。
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
または
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Bashでは、Wordの分割や変数へのパス名の展開はしないので、代わりに[[ ]]
を使用することをお勧めします。それが式の一部でない限り、引用符は不要な場合があります。
[[ $# -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.
あなたが[[ ]]
の他の機能とそれを組み合わせる必要があるなら、それは役に立つはずです。
数値を扱う場合は、 算術式 を使用するのが得策です。
if (( $# != 1 )); then
echo "Illegal number of parameters"
fi
On []:!=、=、== ...は 文字列 比較演算子であり、-eq、-gt ...は 算術 2進数の演算子.
私は使うだろう:
if [ "$#" != "1" ]; then
または
if [ $# -eq 1 ]; then
特定の引数が欠けている場合にのみ保釈に興味があるなら、 パラメータ置換 は素晴らしいです:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
うまくいく単純なワンライナーは、次のものを使って実行できます。
[ "$#" -ne 1 ] && ( usage && exit 1 ) || main
これは次のように分類されます。
注意することを考えています:
this bashのチートシートをチェックしてください。
渡された引数の長さを確認するには、"$#"
を使用します。
渡された引数の配列を使用するには、"$@"
を使用します。
長さをチェックし、反復する例は次のようになります。
myFunc() {
if [[ "$#" -gt 0 ]]; then
for arg in "$@"; do
echo $arg
done
fi
}
myFunc "$@"
このアーティキュレートは私を助けました、しかし私と私の状況のためにいくつかのことを見逃していました。うまくいけば、これは誰かに役立ちます。
あなたが安全な側になりたい場合は、getoptsを使用することをお勧めします。
これは小さな例です。
while getopts "x:c" opt; do
case $opt in
c)
echo "-$opt was triggered, deploy to ci account" >&2
DEPLOY_CI_ACCT="true"
;;
x)
echo "-$opt was triggered, Parameter: $OPTARG" >&2
CMD_TO_EXEC=${OPTARG}
;;
\?)
echo "Invalid option: -$OPTARG" >&2
Usage
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
Usage
exit 1
;;
esac
done
詳細はこちらを参照してください。 http://wiki.bash-hackers.org/howto/getopts_tutorial
テスト条件の間にスペースを入れるべきです:
if [ $# -ne 1 ];
then echo "illegal number of parameters"
fi
これが役に立つことを願っています。
ここでは、パラメータが1つだけ与えられているかどうかを確認するための単純なものがスクリプトを終了します。
[ "$#" -ne 1 ] && echo "USAGE $0 <PARAMETER>" && exit