2013-04-14 5 views
0

У меня возникает проблема при чтении ввода из командной строки в сценарии оболочки. Имя моего сценария - status.ksh, и я должен взять параметр из командной строки. Этот скрипт принимает 2 параметра. Первый - «-e», а второй - «имя_сервера».Чтение параметра через командную строку (начинается с «-»)

Когда я бегу сценарий, как это,

status.ksh -e server_name

echo [email protected] 

дает выход "server_name" только, где, как ожидается, выход должен быть "-e server_name"

и echo $1 дает выход как NULL, где, как ожидается, выход должен быть «-e».

Просьба указать, как читать, получить 1-й параметр, который является «-e».

Благодаря & уважением

+0

он должен работать. убедитесь, что вы выполнили правильный файл с помощью правильного интерпретатора. –

+0

Привет, Karoly, приведенный выше сценарий работает неправильно, но решение, предоставленное Джо, хорошо работало. – orNehPraka

+0

Хм .. ты прав, я не думал достаточно тяжело ... см. Мой ответ. –

ответ

0

Вы читали эту ссылку? http://www.lehman.cuny.edu/cgi-bin/man-cgi?getopts+1

Вы не должны использовать параметры $ 1, $ 2, $ @ и т. Д. Для анализа параметров. Есть встроенные функции, которые могут справиться с этим для вас.

Example 2 Processing Arguments for a Command with Options 

The following fragment of a shell program processes the 
arguments for a command that can take the options -a or -b. 
It also processes the option -o, which requires an option- 
argument: 

    while getopts abo: c 
    do 
     case $c in 
     a | b) FLAG=$c;; 
     o)  OARG=$OPTARG;; 
     \?)  echo $USAGE 
      exit 2;; 
     esac 
    done 
    shift `expr $OPTIND - 1` 

Другие примеры:

http://linux-training.be/files/books/html/fun/ch21s05.html

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds2/getopts.htm

http://www.livefirelabs.com/unix_tip_trick_shell_script/may_2003/05262003.htm

+0

Привет @Joe, требуется еще одна помощь. Один из моих параметров для чтения - «?» сам, поскольку я использую случай, его вариант по умолчанию - «?». Не могли бы вы помочь мне в этом сценарии. status.ksh -e имя_сервера -s sname -? – orNehPraka

+0

Я не думал об этой возможности. Извините, я не знаю. –

1

Проблема была вызвана -e. Это флаг для echo.

-e  enable interpretation of backslash escapes 

Большинство команд UNIX позволяют -- быть использованы для отдельных флагов и остальных аргументов, но echo не поддерживает это, так что вам нужна еще одна команда:

printf "%s\n" "$1" 

Если вы нужен сложный синтаксический анализ аргументов командной строки, определенно перейдите с getopts, как предложил Джо.

+0

Привет, Кароли, ты абсолютно прав. Спасибо за разъяснение. – orNehPraka

Смежные вопросы