正しい数の引数を確認する


147

正しい数の引数(1つの引数)を確認するにはどうすればよいですか?誰かが正しい数の引数を渡さずにスクリプトを呼び出そうとし、コマンドライン引数が実際に存在し、ディレクトリであることを確認する場合。


5
@Daniel shellという意味/bin/sh
Ruel

回答:


215
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

変換:引数の数が(数値的に)1でない場合、または最初の引数がディレクトリでない場合は、使用状況をstderrに出力し、エラーステータスコードで終了します。

よりわかりやすいエラーレポート:

#!/bin/sh
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi
if ! [ -e "$1" ]; then
  echo "$1 not found" >&2
  exit 1
fi
if ! [ -d "$1" ]; then
  echo "$1 not a directory" >&2
  exit 1
fi

1
@Andrew K:どの行でこれを報告していますか?「if」行の場合は、2つの句のいずれif [ "$#" -ne 1 ] ; thenif ! [ -d "$1" ]; thenを切り取って作成するか、どちらの句が問題を引き起こしているかを確認してください。
ローレンスゴンサルベス

ありがとうございます。ファイル名が存在しない場合はどうですか?
Andrew K

存在しない==限り、ディレクターではありません-d。別のチェックを追加する場合は-e、存在をチェックするために使用できます。
ローレンスゴンサルベス

if [-e "$ 1"] then echo "$ 1:No such directory" exit 1 fi
Andrew K

@Andrew K:チェックを逆にします。-eファイルが存在する場合はtrueを返します。わかりやすいエラー報告を回答に追加しました。
ローレンスゴンサルベス

22

猫のscript.sh

    var1=$1
    var2=$2
    if [ "$#" -eq 2 ]
    then
            if [ -d $var1 ]
            then
            echo directory ${var1} exist
            else
            echo Directory ${var1} Does not exists
            fi
            if [ -d $var2 ]
            then
            echo directory ${var2} exist
            else
            echo Directory ${var2} Does not exists
            fi
    else
    echo "Arguments are not equals to 2"
    exit 1
    fi

以下のように実行します-

./script.sh directory1 directory2

出力は次のようになります-

directory1 exit
directory2 Does not exists

14

コマンドラインで渡される引数の総数は、$#」で確認できます たとえば、シェルスクリプト名はhello.sh

sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument 
if [ $# -eq 1 ] 
then
    echo $1
else
    echo "invalid argument please pass only one argument "
fi

出力は hello-world

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.