2010-12-03 25 views
94

Doğru argüman sayısını nasıl kontrol ederim (bir argüman). Birisi doğru sayıda argümanı geçmeden betiği çağırmaya çalışırsa ve komut satırı argümanının gerçekte var olduğundan ve bir dizin olduğundan emin olmak için kontrol etmeye çalışırsa.Doğru bağımsız değişkenlerin kontrol edilmesi

+5

@Daniel' shell' – Ruel

+1

sh –

cevap

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

yapıldı: parametre sayısı 1 (sayısal) eşit değilse ya da ilk bağımsız bir hata durumu kodu ile, standart hataya ve çıkış için bir dizin, çıkış kullanımı değilse.

Daha kolay hata raporlama:

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

içinde çalışıyorum bir tamsayı ifadesi exptected deyimiyle bir hata iletisi alıyorum –

+1

Hangi kabuk kullanıyorsunuz? –

+1

@Andrew K: bunu bildiren hat nedir? Eğer "if" satırı buysa, iki cümleden birini "eğer [" $ # "-ne 1 ise; o zaman ya da eğer! [-d "1 $"]; o zaman hangi maddenin sorun yarattığını görmek için. –

5

Sen ile komut satırında geçirilen argümanların sayısını kontrol edebilirsiniz "$#" Say Örnek benim kabuk komut dosyası adı hello.sh

olduğunu
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 

Çıkış hello-world

+0

bir şey yanlış mı? –

+0

Eğer öyleyse bana haber ver ... teşekkür ederim @chicks –

+0

Hayır. –

9

kedi 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 

aşağıda gibi çalıştırmak -

./script.sh directory1 directory2 

Çıktı olacak gibi - `/ bin/sh demektir

directory1 exit 
directory2 Does not exists 
İlgili konular