Перебирая аргументы в bash - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь написать код, который запускается в моем списке аргументов, например, если у меня есть -p a b c d -q g e f c в качестве аргументов: когда я получаю -p, я хочу, чтобы цикл работал с переменными a b c d, пока не получу -q, и затем сделаю что-то еще, Точно так же я хочу, чтобы все было наоборот;

это мой код:

#bin/bash
while test -n "$1" -a ${1:0:1} = - ;do
if test x$1=x-q:then
    shift
    while test -n "$1" ; do
        echo $1
        if test x$2=x-p;then 
            break;
        shift
    done
fi
if test x$1=x-p;then 
   echo 'print test'+$1;
   shift
fi
done

но перерыв не работает, кто-нибудь знает, как я могу это реализовать?

1 Ответ

1 голос
/ 21 марта 2019

Рассмотрим сначала анализ всех аргументов и сбор аргументов "-p" в одном массиве и аргументов "-q" в другом массиве:

p_args=() 
q_args=()
opt=""

for arg do 
    case $arg in 
        "-p") opt=p ;; 
        "-q") opt=q ;; 
           *) [[ $opt == p ]] && p_args+=("$arg")
              [[ $opt == q ]] && q_args+=("$arg")
              ;; 
    esac
done

# do stuff with "-p" args
declare -p p_args

# do stuff with "-p" args
declare -p q_args
...