如何在Bash中处理2个以上的参数?

时间:2019-04-22 19:59:50

标签: bash shell scripting arguments command-line-arguments

因此,我想传递2个参数,并希望将这些参数组合在一起并分别处理。我已经对开关盒进行了编码,以分别处理它们,但是我不确定如何一起处理它们。

$ sh match_the_pattern.sh -a 6 -b 5 words.txt

在这里

  • -a:至少指定了字母数。
  • -b:最多指定字母数。

我在寻找什么?

当我将-a-b合并在一起时,脚本首先应列出所有具有给定单词数量的单词,然后保存,然后从其中使用{{ 1}},这是我们从-b得到的结果中最多的字母,然后打印计数。

这是一个双重过滤器,不像您分别发布了它们。

-a

注意,我确实知道如何处理while [[ $# -gt 0 ]]; do case $1 in -a) argument=$ egrep "^[[:alnum:]]{$argument,}$" $dictionyname | wc -l shift ;; -b) arg=$2 egrep "^[[:alnum:]]{0,$argument}$" $dictionyname | wc -l shift ;; esac shift done $ sh match_the_pattern.sh -a 6 -b 5 words.txt 7000 $ sh match_the_pattern.sh -a 6 words.txt 115690 $ sh match_the_pattern.sh -b 5 words.txt 12083 -a,不知道如何将-b-a的结果一起传递给参数...

如果现在,我通过命令,则得到以下输出:

-b

所以它正在处理a和b,但是一个接一个地给出结果。

1 个答案:

答案 0 :(得分:0)

根据参数设置变量,然后在循环后使用它们。

min=
max=
while [[ $# -gt 0 ]]; do
    case $1 in
    -a)
        min=$2
        shift ;;
    -b) 
        max=$2
        shift ;;
    -*)
        echo "Unknown option $1"
        exit 1 ;;
    *) 
        break ;;
    esac
    shift
done

if [[ -z $min && -z $max ]]
then 
    echo "At least one of -a and -b must be used"
    exit 1
fi

egrep "^[[:alnum:]]{${min:-1},$max}$" "$@" | wc -l

${min:-1}表示使用$min的值,但如果为空,则使用1。因此,如果他们不提供-a,它将是{1,$max}