1

私はphpプログラミングを知っていますが、bashスクリプトプログラミング構文に精通していません。

私はこのコードスニペットを持っています

EXPECTEDARGS=0
if [ $# -ne $EXPECTEDARGS -o "x$0" == "x"  -o $0 == "bash" ]; then
  echo "Usage:"
  echo "   Parameter 1: argument 1 missing"
  exit 1
fi

これにより、少なくとも1つの引数が正しくチェックされます。

このコードスニペットが行ごとに何を意味するのかを理解したいと思います。これまでのところ、EXPECTEDARGSが変数であることがわかります。

コードスニペットを理解した後、2つの引数をチェックするようにコードスニペットを変更したいと思います。

コードスニペットはgithubの要点になります。

私はを使用してスクリプトを実行することを目指しています

bash -c "$(curl -fsSL https://raw.github.com/gist/4491019)" <arg1> <arg2> 

もちろん<>記号なし。

4

4 に答える 4

1

if [ $# -ne $EXPECTEDARGS -o "x$0" == "x" -o $0 == "bash" ]; それから

  • $# - スクリプトへの引数の総数。
  • "x$0" == "x"- $0null/空かどうかを確認します。
  • $0- 最初の引数 。これは常にスクリプト名です。したがって、スクリプト名がbashでない限り、文字列 'bash' でチェックする条件は false を返します。
  • -o- OR 演算子

残りは、ステートメントが真echoの場合にコンソールに出力されるステートメントです。ifbash での構文if

if [ <condition> ]; then
   # ... Statements
fi

引数の数が2であることを確認するには、次のものが必要です-

EXPECTEDARGS=2
if [ $# -ne $EXPECTEDARGS ]; then
     # number of arguments are not 2, display usage etc, here
fi

詳細については、bash リファレンス マニュアルを参照してください

于 2013-01-09T06:23:32.527 に答える
1

ne引数の数が ( ) EXPECTEDARGSと等しくない場合、または ( -o) スクリプト名が空の文字列 ( "x$0" == "x") または ( -o) スクリプト名であるbash場合、使用状況を報告して終了します。スクリプト名のテストは、呼び出しがパイプや $(cat script) のようなものではなく、スクリプト ファイルを介して行われるかどうかをテストしている可能性があります。

于 2013-01-09T06:25:33.997 に答える
1
  • $# 引数の数。
  • $0 シェルスクリプト名
  • $1,$2,...,$n 引数 1、2 など
  • [条件] 1 つ以上の条件をテストします。-ne 等しくない、-eq 等しい、-gt より大きい、-lt より小さい、-o または、= 文字列/数値を比較します
  • "x$0" = x スクリプト名/プログラム名が空かチェック

詳細を知りたい場合は、スクリプトをファイルとして保存し、echo. 次を使用してスクリプトを実行します。

bash -c ./script.sh

また

bash script.sh

bash+curl の動作を模倣する

[ ]またはtest良い例です。それらは単なるプログラムであり、実際には同じプログラムですが、C で $0 または argv[0] をチェックしている間、動作が少し異なります。

$ ls -l /bin/test /bin/\[
-r-xr-xr-x  2 root  wheel  43120 Dec 11  2011 /bin/[*
-r-xr-xr-x  2 root  wheel  43120 Dec 11  2011 /bin/test*

実行[ 2 -gt 1 ]; echo $?すると、端末に 0 が出力されます。0 は成功を意味し、それ以外はすべて失敗を意味します。test代わりに呼び出すとtest 2 -gt 1; echo $?、0 も出力されます。

プログラムを実行して終了コードをチェックするifだけで、次のこともできます。

if true; then
    echo success
fi

if false; then
    echo fail
fi

true; echo $?; false; echo $?

印刷されます: 成功、0、1

于 2013-01-09T06:27:24.357 に答える
1
  1. $# - シェル プログラムに渡されたコマンド ライン引数の数を格納します。

  2. $0 - スクリプトのファイル名を指します。

スクリプトで 2 つの引数をチェックするには、以下の変更を行います。

EXPECTEDARGS=2
if [ $# -lt $EXPECTEDARGS -o "x$0" == "x"  -o $0 == "bash" ]; then
于 2013-01-09T06:31:39.007 に答える