击。 getopts命令。选项将在程序结束时执行某些操作

时间:2017-10-16 18:25:24

标签: bash getopts

问题:
如果我的程序选择' -v'它应该打印"再见!"在计划结束时。我可以这样做,但它会在开头打印出来。所以我需要一些最终会执行它的命令,如果有的话。或者我该怎么做?

 getopts "v" opt
 case ${opt} in
 v) echo "Good bye!"
 esac

2 个答案:

答案 0 :(得分:1)

您只需在解析选项时设置变量,并在脚本末尾根据变量的值执行您想要的操作

say_bye=false
while getopts "v" opt; do
  case "$opt" in
    v) say_bye=true ;;
  esac
done

# do stuff

# and at the end:
$say_bye && echo "Good bye!"

如果您的脚本有多个潜在的终点,并且您想对所有这些终点说再见,请使用EXIT陷阱

say_bye=false
while getopts "v" opt; do
  case "$opt" in
    v) say_bye=true ;;
  esac
done

end_business() {
    $say_bye && echo byebye
}
trap end_business EXIT

# do the rest of your script here ...

答案 1 :(得分:0)

假设您的-v旨在"详细",我喜欢在许多脚本中set -x来获取调试输出。如果你这样做,你可以用这样的无操作语句来编写你的脚本,这些语句在没有详细的情况下作为读者的注释,但在详细的时候输出到stderr -

: setting x to "$x"

这与EXIT上的陷阱非常吻合,正如@ glenn已经提到的那样。因此,

while getopts "v" opt
do case "$opt" in
   v) verbose=1 # in case you need other contingent code bits
      set -v ;;
   esac
done

然后

trap ' : "bye-bye!" ' EXIT

如果set -x关闭,那将无害地执行并且不输出任何内容。