2010-12-03 4 views
94

正しい引数の数(1つの引数)を確認する方法を教えてください。もし誰かが正しい数の引数を渡さずにスクリプトを呼び出そうとすると、コマンドライン引数が実際に存在し、ディレクトリであることを確認することを試みます。正しい引数の数を確認する

+5

@Daniel' shell' -

./script.sh directory1 directory2 

出力は次のようになります' – Ruel

+1

im in sh –

答えて

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

翻訳:引数の数(数値)1に等しくないか、または最初の引数は、エラー状態コードと標準エラーと出口への出力の使用ディレクトリではない場合。

もっとフレンドリーエラー報告:

#!/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 
+0

整数式が抜けているというエラーメッセージが表示される –

+1

あなたはどのシェルを使用していますか? –

+1

@Andrew K:これはどのラインで報告されていますか?それが "if"行ならば、二つの節のうちの一つを切り取って 'if [" $# "-ne 1];そして 'もしあれば! [-d "$ 1"];どの句が問題を引き起こしているのかを確認する。 –

5

あなたは$# セイ例えば私のシェルスクリプト名は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

+0

上記のコードに何か問題がありますか? –

+0

もし私に教えてあげれば...ありがとう@chicks –

+0

Nahはうまく働いている –

9

猫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 

以下のようにそれを実行する - `/ binに/ SHを意味

directory1 exit 
directory2 Does not exists 
関連する問題