2010-12-03 3 views
94

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

+5

@Daniel `shell`, что означает`/bin/ш ` – Ruel 2010-12-03 01:15:52

+1

im working in sh – 2010-12-03 01:16:39

ответ

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

Перевод: Если количество аргументов не является (численно) равно 1 или первый аргумент не является каталогом, выход использования в стандартный поток ошибок и выйти с кодом сбой.

Более дружественные сообщения об ошибках:

#!/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 
+0

Я получаю сообщение об ошибке, говорящее, что целое выражение exptected – 2010-12-03 01:19:04

5

Вы можете проверить общее количество аргументов, которые передаются в командной строке с «$#» Скажет для примера моей оболочки имя скрипта 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

9

кошка 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 
Смежные вопросы