Bash:通过案例获取

时间:2015-12-08 18:50:07

标签: bash getopts

我试图通过案例获得getopts选项。

现在我的脚本设置方式,我有一个启动,停止,状态,帮助选项,我想添加一些-x选项来控制一些变量。

如果我不使用开始/停止/状态,那么-x变量可以工作,但是当我使用它们时却不行。

代码的相关部分如下。

  # Variable initialization
  DOMAIN="google.ca"
  LIMIT="25"
  TIMEBETWEEN="10"
  INTERATION="1"
  PINGS="25"

  options='d:l:t:p:h'
  while getopts $options opt; do
    case $opt in
      d) DOMAIN=$OPTARG ;;
      l) LIMIT=$OPTARG ;;
      t) TIMEBETWEEN=$OPTARG ;;
      p) PINGS=$OPTARG ;;
      \?) usage ;;
  esac
  done
  shift "$((OPTIND-1))" # Shift off the options and optional --.

case "$cmd" in
 start)
  pingtest_start &
  sleep 2
  pingtest status
  exit 0;
 ;;

 stop)
  pingtest_stop
  exit 0;
 ;;

 status)
  pingtest_status
  exit 0;
 ;;

 help)
  usage
  exit 0;
 ;;

 *)
  if [ "$cmd" ]; then
   clear
   echo "Unknown command '$cmd'"
  fi
  usage
 ;;
esac

其他变量有效,如果我使用start,则默认值可以正常工作。

编辑如下:

通过将$ cmd的案例放入新选项并将案例更改为$ OPTARG

,我找到了一个解决方法

新布局

options='a:d:l:t:p:h'
while getopts $options opt; do
  case $opt in
    a) case $OPTARG in 
    start)
      pingtest_start &
      sleep 2
      pingtest status
      exit 0;
      ;;

      stop)
       pingtest_stop
       exit 0;
     ;;

     status)
      pingtest_status
      exit 0;
     ;;
   esac
   ;;
    d) DOMAIN=$OPTARG ;;
    l) LIMIT=$OPTARG ;;
    t) TIMEBETWEEN=$OPTARG ;;
    p) PINGS=$OPTARG ;;
    \?) usage ;;
  esac
done
shift "$((OPTIND-1))" # Shift off the options and optional --.

1 个答案:

答案 0 :(得分:1)

你是否像./script start -d a -l 42一样调用你的脚本? getopts期待争论首先出现。                      - 格伦杰克曼

请参阅格伦杰克曼的评论。 getopts在看到第一个非选项参数后立即停止,因此在开始shift循环之前,您需要getopts第一个参数。                      - chepner