回答:
if [[ $# -eq 0 ]] ; then
echo 'some message'
exit 0
fi
case "$1" in
1) echo 'you gave 1' ;;
*) echo 'you gave something else' ;;
esac
高度なバッシュ・スクリプティングガイドはかなり良いです。その名前にもかかわらず、それは基本を扱います。
> /dev/null
および/または2> /dev/null
その後に置くことができます。
exit 1
)。戻りコードと出口コードには、オンラインですぐに見つけられる別の規則がありますが、重要な点は、成功を示す0であってはならないということです。
if [ -z "$*" ]; then echo "No args"; fi
No args
-zは、stringの長さがゼロの単項演算子です。
$*
すべての引数です。引用符は、安全のため、および存在する場合は複数の引数をカプセル化するためのものです。
このような他の演算子については、「単項」を使用man bash
して検索(/キー)します。
-z
ようmizzing
古いですが、以前の混乱のおかげで、今答えを書き直す理由があります。
if [[ $1 == "" ]] #Where "$1" is the positional argument you want to validate
then
echo "something"
exit 0
fi
位置引数$ 1がない場合、これは「Something」をエコーします。ただし、$ 1に特定の情報が含まれていることは検証されません。
$#
明示的に引数の数の整数カウントです。これは「0」になり、引数がない場合でも「何か」をエコーするか、正の数になり、「何か」を正しくエコーします。ただし、使用する入力や入力の欠如に関係なく、チェック自体は何も実行しません。常に$#
値を含むことを報告します。したがって、これは完全に間違っており、主張どおりに機能することはありません。
echo $#
、その後、スクリプト/tmp/test.shの内容として、あなたが利用できる持っているだけでなく、/ binに/ shの(または/ binに/ダッシュと何でも他のシェルの実装として/下/ binにbashのそれを実行します。/tmp/test.sh
「0」をエコーしますれるようにコンソールが、/bin/dash /tmp/test.sh
一方、/tmp/test.sh foo
「1」をエコーし、/tmp/test.sh first second
「2」エコーであろう。
man bash
、「特別なパラメーター」のセクションでは、「シェルはいくつかのパラメーターを特別に扱います。これらのパラメーターは参照されるだけであり、それらへの割り当ては許可されません。」および「#10進数の位置パラメーターの数に展開されます。」同様に、pubs.opengroup.org