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


148

Как проверить правильность количества аргументов (один аргумент). Если кто-то пытается вызвать скрипт, не передавая правильное количество аргументов, и проверяет, действительно ли аргумент командной строки существует и является каталогом.


5
@ Даниил, shellчто означает/bin/sh
Ruel

Ответы:


216
#!/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
@ Андрей K: по какой линии он сообщает об этом? Если это «если» линия, попробуйте вырезать одну из двух положений , что делает его либо if [ "$#" -ne 1 ] ; thenили if ! [ -d "$1" ]; thenчтобы увидеть , какой пункт является причиной проблемы.
Лоуренс Гонсалвес

Я понял это спасибо. Как насчет того, если имя файла не существует?
Андрей К

Не существует == не директор, насколько -dэто касается. Если вы хотите добавить отдельную проверку, вы можете использовать ее -eдля проверки существования.
Лоуренс Гонсалвес

if [-e "$ 1"], затем повторить "$ 1: такой директории нет" exit 1 fi
Эндрю К

@ Андрей К: вы хотите инвертировать чек. -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.