LINUX.ORG.RU

Разбор аргументов bash-скрипта


0

0

Допустим есть скрипт test.sh
Ему переданы параметры командной строки

test.sh -p qwe -h rty

Внутри скрипта мне я в цикле перебираю

SOME_VAR=""
COUNT=1

for i in $* ; do
   if [ "$i" = "-p" ]; then
       SOME_VAR=$(expr $COUNT + 1)
   fi
   
   COUNT=$(expr $COUNT + 1)
done

Короче говоря в SOME_VAR мне нужно засунуть
следующий по порядку после "-p" аргумент, но
по факту туда попадает (expr $COUNT + 1), т.е.
число 2. Но ведь я пишу $(expr $COUNT + 1) и
поидее туда должно попасть $2, которое "qwe".
Подскажите пож-сто что я делаю не так?
anonymous

Нифига не понял :-), но может тебе нужен man getopt?

sdio ★★★★★
()

зачем изобретать велосипеды, man getopt

asgard
()

или смотреть man bash на предмет getopts

ananas ★★★★★
()
Ответ на: комментарий от dilmah

man bash :
getopts returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs

Это всё хорошо, но узнать есть такой параметер или его нет я и сам могу.
Мне нужно запхнуть в локальную переменную значение этого параметра. См. вопрос

anonymous
()
Ответ на: комментарий от anonymous

вырезано из реального кода:

while getopts d:l optname > /dev/null 2>&1; do
    if test "$optname" = "d"; then
        DESCR="$OPTARG"
    elif test "$optname" = "l"; then
        LOCAL=1
    else
        echo Unknown option 1>&2
        exit 1
    fi
done
shift `expr $OPTIND - 1`

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Ага, то что надо. Большое спасибо.

anonymous
()
Ответ на: комментарий от dilmah

имхо, лучше case ... esac для разбора использовать.

ananas ★★★★★
()

> COUNT=$(expr $COUNT + 1)

> Короче говоря в SOME_VAR мне нужно засунуть следующий по порядку после "-p" аргумент, но по факту туда попадает (expr $COUNT + 1), т.е. число 2. Но ведь я пишу $(expr $COUNT + 1) и поидее туда должно попасть $2, которое "qwe". Подскажите пож-сто что я делаю не так?

а по исходному вопросу -- для этого создан eval

dilmah ★★★★★
()
Ответ на: комментарий от sdio

вы вообще читали что автору нужно? Он жаловался что он хочет получить $2, где 2 получается как результат его вычислений. Это eval. А вы ему какую-то фигню (да еще и нестандартную) пишете.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Разуй глаза, я не автору это написал

sdio ★★★★★
()
Ответ на: комментарий от dilmah

Это не ко мне, я вообще всегда пишу на наистандартнейшем sh (ибо зоопарк unix-ов на работе)

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.