在bash中循环遍历参数

时间:2019-03-21 16:55:35

标签: bash loops arguments

我正在尝试编写在参数列表上运行的代码, 例如,如果我有-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

但是break似乎不起作用,有人知道我可以如何实现吗?

1 个答案:

答案 0 :(得分:1)

首先考虑解析所有参数,然后在一个数组中收集“ -p” args,在另一个数组中收集“ -q” args:

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