根据getopts中给出的变量数运行多次shell命令

时间:2017-01-17 15:46:17

标签: bash shell

我希望使用getopts函数多次运行命令,具体取决于为shell提供的参数数量。

以下是script.sh

的内容
#!/bin/bash

while getopts "i" flag
do
  case "$flag" in
    i) name="$OPTARG";;
  esac
done
echo $name

我希望echo命令运行的次数与给出的名称一样多。例如,如果我运行./script.sh -i One, Two, Three, Four,我希望脚本运行echo 4次,并将名称打印到shell。

2 个答案:

答案 0 :(得分:2)

理想情况下,您将单个逗号分隔的单词作为-i的参数,然后将其拆分为逗号(注意:由于使用需要bash数组和-a的{​​{1}}选项。

read

然后以下内容应该有效:

while getopts "i:" flag
do
  case "$flag" in
    i) IFS=, read -a names <<< "$OPTARG";;
  esac
done

printf '%s\n' "${names[@]}"

$ ./script.sh -i One,Two,Three,Four One Two Three Four 并非真正设计用于处理选项的任意数量的参数。

答案 1 :(得分:0)

我会做这样的事情:

#!/bin/bash

if
  [[ "$1" = -i ]]
then
  shift
  for arg in "$@"
  do
    echo "$arg"
  done
fi

根据您需要处理的其他选项,它可能在您的具体情况下不起作用,但我缺乏确定的信息。