2013-10-15 3 views
0

Я пытаюсь выполнить команду, но мне нужно получить аргумент командной строки. Вот моя проблема:Аргументы командной строки или аргумент аргумента case

Это код:

pl_function(){ 
node=$(echo "$1" | awk -F'\.' '{print $2}') 
echo $node 
} 

У меня есть случай заявление:

case "$1" in -pl.*) 
pl_function 
    ;; 
esac 

Когда я запускаю это, печатает пустой.

Кроме того, я хотел бы включить getopts, чтобы не беспокоиться о порядке аргументов. Предположим, у меня есть -location, за которым следует аргумент и -grep, за которым следует аргумент и -def_location, за которым следует аргумент.

Как я могу использовать getopts в этом случае?

+0

Как насчет использования функций с незарегистрированными именами? 'my_function' может быть безвредным. – fedorqui

+0

да простите! его фактически называется pl_function – user2864207

+1

У вас [бесполезное использование эха] (http://partmaps.org/era/unix/award.html#echo), и вы не можете правильно указать переменную, которую вы 'echo'. Функция может быть просто «эхо» $ 1 »| awk -F '\.' '{print $ 2}' ', но см. также ответ @ JohnKugelman. – tripleee

ответ

1

Когда я запускаю это, он печатает пустой.

Это бы, потому что вы не пропустите какой-либо параметр функции, которая ожидает один. Замените вызов функции с

my_function "$1" 

Кроме того, как pointed путем @fedorqui не используется reserved words для имен переменной/функции.

+0

большой !! что на самом деле отвечает на мой вопрос !! Спасибо – user2864207

2

Внутри функции $1, $2, и др. Являются аргументами функции. При вызове функции необходимо явно передать сценарий $1.

case "$1" in -pl.*) 
pl_function "$1" 
    ;; 

Кроме того, вы можете использовать немного магии сценария оболочки, чтобы сделать строку расщепления вместо ссылающегося AWK:

node=${1#*.} # `#*.' removes a substring matching `*.' from the 
       # front of $1 
+0

pl_function не просто печатает 1 в -pl.1, но фактически использует 1 в операторе if для выполнения других команд. Мне нужен оператор case, просто для доступа к функции pl_function, когда пользователь вводит -pl.1 или -pl.2 и т. Д. – user2864207

+0

Если имеется более двух разделенных точкой точек, вам также нужно сделать '' $ {1 %%. *} "'. Но +1, это способ сделать это. – tripleee

+0

это действительно произведение тоже !! но он не решил проблему, что он напечатал пустой.Моя ошибка заключалась в том, что я не передал аргументы функции. – user2864207

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