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.


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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.