入力引数の存在を確認する必要があります。次のスクリプトがあります
if [ "$1" -gt "-1" ]
then echo hi
fi
私は
[: : integer expression expected
最初に入力引数1が存在するかどうかを確認するにはどうすればよいですか。
それは:
if [ $# -eq 0 ]
then
echo "No arguments supplied"
fi
$#
変数はスクリプトが渡された入力引数の数を教えてくれます。
あるいは、引数が空文字列かどうかをチェックすることもできます。
if [ -z "$1" ]
then
echo "No argument supplied"
fi
-z
スイッチは、 "$ 1"の展開がNULL文字列かどうかをテストします。それがNULL文字列であれば、本体が実行されます。
このようにして実証することをお勧めします
if [[ $# -eq 0 ]] ; then
echo 'some message'
exit 1
fi
引数が少なすぎる場合は通常終了する必要があります。
場合によっては、ユーザーがスクリプトに引数を渡したかどうかを確認し、そうでない場合はデフォルト値に戻す必要があります。以下のスクリプトのように:
scale=${2:-1}
emulator @$1 -scale $scale
ユーザーが2番目のパラメータとしてscale
を渡さなかった場合は、デフォルトで-scale 1
を指定してAndroidエミュレータを起動します。 ${varname:-Word}
は展開演算子です。他の展開演算子もあります。
${varname:=Word}
which setsvarname
の値を返す代わりに未定義のWord
。${varname:?message}
は、定義されていてnullでない場合はvarname
を返すか、message
を出力してスクリプトを中止します(最初の例のように)。Word
が定義されていてnullではない場合に限り、varname
を返す${varname:+Word}
。それ以外の場合はnullを返します。試してください:
#!/bin/bash
if [ "$#" -eq "0" ]
then
echo "No arguments supplied"
else
echo "Hello world"
fi
引数がスクリプトに渡されたかどうかを検出するもう1つの方法:
((!$#)) && echo No arguments supplied!
(( expr ))
を指定すると、 シェル演算 の規則に従って式が評価されます。
引数がない状態で終了するには、次のように言うことができます。
((!$#)) && echo No arguments supplied! && exit 1
上記の別の (類似) の言い方は、
let $# || echo No arguments supplied
let $# || { echo No arguments supplied; exit 1; } # Exit if no arguments!
help let
は言う:
let: let arg [arg ...]
Evaluate arithmetic expressions. ... Exit Status: If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.
私はこのスニペットを単純なスクリプトによく使用します。
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\nPlease call '$0 <argument>' to run this command!\n"
exit 1
fi
もう少し指摘しておく必要があるのは、単に文字列がnullであることをテストできるということです。
if [ "$1" ]; then
echo yes
else
echo no
fi
同様にarg countを期待しているのなら、最後のものをテストしてください。
if [ "$3" ]; then
echo has args correct or not
else
echo fixme
fi
など、任意のargまたはvar
引数が存在するかどうかを確認したい場合は、引数の数がターゲット引数番号以上であるかどうかを確認できます。
次のスクリプトは、これがどのように機能するかを示しています
#!/usr/bin/env bash
if [ $# -ge 3 ]
then
echo script has at least 3 arguments
fi
次のような出力を生成します。
$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments
ちなみに、Bashの数値テスト演算子は整数(-eq
、-lt
、-ge
など)に対してのみ機能します。
私は自分の$ varがintであることを確認するのが好きです
var=$(( var + 0 ))
テストする前に、 "[:integer arg required"エラーを防ぐためだけに使用します。