Memeriksa jumlah argumen yang benar

147

Bagaimana saya memeriksa jumlah argumen yang benar (satu argumen). Jika seseorang mencoba menjalankan skrip tanpa memberikan jumlah argumen yang benar, dan memeriksa untuk memastikan argumen baris perintah benar-benar ada dan merupakan direktori.

Andrew K
sumber
5
@Aniel shellitu artinya/bin/sh
Ruel

Jawaban:

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

Terjemahan: Jika jumlah argumen tidak (secara numerik) sama dengan 1 atau argumen pertama bukan direktori, output penggunaan ke stderr dan keluar dengan kode status kegagalan.

Pelaporan kesalahan yang lebih ramah:

#!/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
Laurence Gonsalves
sumber
1
@ Andrew K: di baris mana ini melaporkan ini? Jika itu adalah baris "jika", cobalah memotong salah satu dari dua klausa yang membuatnya if [ "$#" -ne 1 ] ; thenatau if ! [ -d "$1" ]; thenuntuk melihat klausa mana yang menyebabkan masalah.
Laurence Gonsalves
Saya menemukan jawabannya terima kasih. Bagaimana jika nama file tidak ada?
Andrew K
Tidak ada == bukan direktur sejauh -dyang bersangkutan. Jika Anda ingin menambahkan cek terpisah, Anda dapat menggunakannya -euntuk memeriksa keberadaan.
Laurence Gonsalves
jika [-e "$ 1"] maka gema "$ 1: Tidak ada direktori seperti itu" keluar 1 fi
Andrew K
@ Andrew K: Anda ingin membalikkan cek. -emengembalikan true jika file ada. Saya menambahkan lebih banyak kesalahan pelaporan yang ramah pada jawabannya.
Laurence Gonsalves
22

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

jalankan seperti di bawah ini -

./script.sh directory1 directory2

Output akan seperti -

directory1 exit
directory2 Does not exists
VIPIN KUMAR
sumber
14

Anda dapat memeriksa jumlah total argumen yang diteruskan dalam baris perintah dengan " $#" Katakan untuk Contoh nama skrip shell sayahello.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

Output akan menjadi hello-world

HaSnen Tai
sumber