Doğru sayıda bağımsız değişken olup olmadığını kontrol etme


156

Doğru sayıda bağımsız değişken (bir bağımsız değişken) için nasıl kontrol ederim. Birisi doğru sayıda bağımsız değişken girmeden komut dosyasını çağırmaya çalışırsa ve komut satırı bağımsız değişkeninin gerçekten var olduğundan ve bir dizin olduğundan emin olmak için kontrol ederse.


5
@Daniel shellşu anlama gelir/bin/sh
Ruel

Yanıtlar:


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

Tercüme: Eğer argüman sayısı (sayısal olarak) 1'e eşit değilse veya ilk argüman bir dizin değilse, kullanımı stderr'e çıktı ve bir hata durum kodu ile çıkın.

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

1
@Andrew K: Bunu hangi satırda bildiriyor? Eğer bu "eğer" satırı ise, onu yapan iki cümleden birini kesmeyi if [ "$#" -ne 1 ] ; thenveya if ! [ -d "$1" ]; thenhangi cümlenin soruna neden olduğunu görmeyi deneyin .
Laurence Gonsalves

Anladım teşekkür ederim. Dosya adı yoksa nasıl olur?
Andrew K

Yok == -dilgilendiği kadarıyla bir yönetmen yok . Ayrı bir çek eklemek isterseniz, -evarlığını kontrol etmek için kullanabilirsiniz .
Laurence Gonsalves

[-e "$ 1"] ise "$ 1: Böyle bir dizin yok" yankılandı 1 fi
Andrew K

@Andrew K: Çeki ters çevirmek istiyorsunuz. -edosya varsa true döndürür. Cevaba daha kolay hata bildirimi ekledim.
Laurence Gonsalves

23

cat 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ğıdaki gibi çalıştırın -

./script.sh directory1 directory2

Çıktı şöyle olacak -

directory1 exit
directory2 Does not exists

14

Komut satırında iletilen toplam argüman sayısını kontrol edebilirsiniz " $#" Örnek için kabuk betiğimin adı şöyle: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

Çıktı olacak hello-world

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.