将多个选项组合到一个选项中(Getopts)

时间:2018-04-20 08:57:28

标签: linux bash scripting options getopts

由于我对使用getopts缺乏透彻的理解,标题肯定是模糊的:0。我目前正在编写一个bash脚本,我想添加一个选项,在getopts的case语句中输出其他选项。为了缩放,我缩短了程序。

#!/bin/bash

while getopts :abc opt
do
  case $opt in
       a) 
           echo "Hello"
           ;;
       b)
           echo "Goodbye"
       c)            
           :ab #****I WANT -c TO OUTPUT THE RESULTS OF a and b************
           ;;
esac
done

正如您在选项c中看到的,我希望这个特殊选项(-c)同时输出-a和-b的结果。有没有办法通过简单地对选项a和b进行c调用来解决这个问题?

2 个答案:

答案 0 :(得分:0)

你可以引入减少重复的功能,如下所示:

#!/bin/bash

do_a() {
  echo "Hello"
}

do_b() {
  echo "Goodbye"
}


while getopts :abc opt
do
  case $opt in
     a)
         do_a
         ;;
     b)
         do_b
         ;;
     c)    
         do_a
         do_b
         ;;
  esac
done

答案 1 :(得分:0)

如果您使用的是最新版本的Bash,而不是使用case终止;;条款,则可以使用具有多种模式的特定于bash的;;&

#!/bin/bash

while getopts :abc opt
do
    case $opt in
        a|c) 
            echo "Hello"
            ;;&
        b|c)
            echo "Goodbye"
            ;;&
    esac
done

$ bash script.bash -a
Hello
$ bash script.bash -c 
Hello
Goodbye

Using ‘;;&’ in place of ‘;;’ causes the shell to test the patterns in the next clause, if any, and execute any associated command-list on a successful match.