Перевірка правильності кількості аргументів


147

Як перевірити правильність кількості аргументів (один аргумент). Якщо хтось намагається викликати скрипт, не вводячи правильну кількість аргументів, перевіряючи, чи аргумент командного рядка дійсно існує та є каталогом.


5
@Daniel shellце означає/bin/sh
Ruel

Відповіді:


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

Переклад: Якщо кількість аргументів не (числово) дорівнює 1 або перший аргумент не є каталогом, виведіть використання stderr та вийдіть з кодом статусу відмови.

Більш дружнє повідомлення про помилки:

#!/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: на якому рядку він повідомляє про це? Якщо це рядок "якщо", спробуйте вирізати одну з двох статей, або зробити це, if [ "$#" -ne 1 ] ; thenабо if ! [ -d "$1" ]; thenпобачити, який із них викликає проблеми.
Лоранс Гонсалвс

Я зрозумів це дякую. Як щодо того, якщо ім'я файлу не існує?
Ендрю К

Не існує == не директор, наскільки -dце стосується. Якщо ви хочете додати окремий чек, ви можете скористатися -eдля перевірки наявності.
Лоранс Гонсальвс

if [-e "$ 1"], то відлуння "$ 1: Немає такого каталогу", вийдіть 1 fi
Andrew K

@Andrew K: ви хочете перевернути чек. -eповертає true, якщо файл існує. Я додав у відповідь більш доброзичливе повідомлення про помилки.
Лоранс Гонсальвс

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

виконати його як нижче -

./script.sh directory1 directory2

Вихід буде таким -

directory1 exit
directory2 Does not exists

14

Ви можете перевірити загальну кількість аргументів, переданих у командному рядку, " $#" Скажіть, наприклад, для мене назва скрипта оболонки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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.