2012-06-23 3 views
1

Я довольно новичок в сценариях оболочки, и мне нужно добавить флаг (getopts) в мой скрипт, где я могу перезаписать команду загрузки url, если скрипт не может связаться с URL по какой-либо причине. Например, если я добавлю свой флаг, то он не завершит мой скрипт, я могу продолжить, если URL-адрес не может быть достигнут.flag to overwrite загрузить url command

В настоящее время у меня есть

if "$?" -ne "0" then 
echo "can't reach the url, n\ aborting" 
exit 

Теперь мне нужно добавить флаг через getopts где я могу игнорировать "$?' - ne "0" команду,

Я не знаю, как работает getopts, я довольно новый к нему. Может кто-то, пожалуйста, помогите мне, как это сделать?

+0

См. Эту ссылку для документации о getopts: http://linux.about.com/library/cmd/blcmdl1_getopts.htm –

+0

@DexterHuinda: Это просто [часть страницы 'Bash' man] (http: // tiswww .case.edu/PHP/Чет/Баш/bash.html # lbDB). Вот отличная рекомендация: [BashFAQ/035] (http://mywiki.wooledge.org/BashFAQ/035). –

ответ

1

Если у вас есть только один вариант, иногда это проще просто проверить $1:

# put download command here 
if (($? != 0)) && [[ $1 != -c ]]; then 
    echo -e "can't reach the url, \n aborting" 
    exit 
fi 
# put stuff to do if continuing here 

Если вы собираетесь принять другие варианты, некоторые, возможно, с аргументами, то getopts следует использовать:

#!/bin/bash 
usage() { echo "Here is how to use this program"; } 

cont=false 

# g and m require arguments, c and h do not, the initial colon is for silent error handling 
options=':cg:hm:' # additional option characters go here 
while getopts $options option 
do 
    case $option in 
     c ) cont=true;; 
     g ) echo "The argument for -g is $OPTARG"; g_option=$OPTARG;; #placeholder example 
     h ) usage; exit;; 
     m ) echo "The argument for -m is $OPTARG"; m_option=$OPTARG;; #placeholder example 
     # more option processing can go here 
     \?) echo "Unknown option: -$OPTARG" 
     : ) echo "Missing option argument for -$OPTARG";; 
     * ) echo "Unimplimented option: -$OPTARG";; 
    esac 
done 

shift $(($OPTIND - 1)) 

# put download command here 
if (($? != 0)) && ! $cont; then 
    echo -e "can't reach the url, \n aborting" 
    exit 
fi 
# put stuff to do if continuing here 
+0

Итак, в командной строке я бы в основном набрал sh myscript.sh -c cont? Пожалуйста, дайте мне знать – user1477324

+0

Нет, просто 'bash myscript.sh -c' или если вы пометите свой скрипт как исполняемый файл (' chmod u + x myscript.sh') и добавьте shebang ('#!/Bin/bash') как в первой строке, вы можете сделать './myscript.sh -c' –

+0

Избегайте быстрого вопроса, что сделает эта команда? if (($?! = 0)) &&! продолжение; то echo -e "не может достигнуть URL-адреса, \ n прерывание" exit fi – user1477324

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

  • Нет связанных вопросов^_^