2014-07-18 3 views
1

Я хочу, чтобы проверить, если параметр командной строки существует при выполнении сценария оболочки, напримерПроверка наличия аргументов командной строки в оболочке

./test.sh arg1 arg2 arg3 arg4 

Хочет проверить, если один из аргументов, это сказать arg3 (не обязательно третий аргумент)

Быстрое решение - использовать цикл for и проверить, соответствует ли один из аргументов заданной строке, но есть ли лучший способ сделать это что-то вроде формы «arg3» в $ @.

ответ

2

(при условии, Баш)

Я хотел бы сделать это:

have_arg3=false 
for arg; do 
    if [[ $arg == "arg3" ]]; then 
     have_arg3=true 
     break 
    fi 
done 
if $have_arg3; then 
    echo "arg3 is present 
fi 

, но вы можете сделать это (все цитаты и пробелы ниже требуется!):

if [[ " $* " == *" arg3 "* ]]; then 
    echo "arg3 is present" 
fi 

могут быть заключены в функцию:

$ arg_in_args() (
    arg=$1 
    shift 
    IFS=: 
    [[ "$IFS$*$IFS" == *"$IFS$arg$IFS"* ]] 
) 
$ set -- foo bar baz 
$ if arg_in_args "arg3" "[email protected]"; then echo Y; else echo N; fi 
N 
$ if arg_in_args "baz" "[email protected]"; then echo Y; else echo N; fi 
Y 
+0

Второе решение - это то, что я хочу, спасибо. – sysuser

+0

Первое решение будет работать; второе решение может не работать, если аргументы могут содержать пробелы (или все, что вы пытаетесь использовать для разделения аргументов). – chepner

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