我必须写一个bash脚本:

    schedsim.sh [-h] [-c #CPUs ] -i pathfile

h 和 c 是 optional 。 i 是必需的,当运行脚本时,如果它没有 i 选项 -> 错误消息。

如何在 getopts 中创建必需的选项?
谢谢!

另一个问题:如何为选项的参数设置默认值?比如说,如果没有提供 c 参数 -> c 参数的默认值为 1。

最佳答案

您不能像“如果缺少该参数,则 getopts 内置函数将返回错误”中的参数设置为必需参数。

但是自己做一个函数是微不足道的:

#!/bin/bash

function parseArguments () {
  local b_hasA=0
  local b_hasB=0
  local b_hasC=0

  while getopts 'a:b::c' opt "$@"; do
    case $opt in
    'a')
      b_hasA=1
      ;;
    'b')
      b_hasB=1
      ;;
    'c')
      b_hasC=1
      ;;
    esac
  done

  if [ $b_hasA -ne 0 ]; then
    echo "A present"
  fi
  if [ $b_hasB -ne 0 ]; then
    echo "B present"
  fi
  if [ $b_hasC -ne 0 ]; then
    echo "C present"
  else
    echo "Error: C absent"
    exit 1
  fi
}

#Quotes required to avoid removing characters in $IFS from arguments
parseArguments "$@"

测试:
$ ./test.bash -c
C present

$ ./test.bash -b
./test.bash: option requires an argument -- b
Error: C absent

$ ./test.bash -b foo
B present
Error: C absent

关于linux - 必需选项 getopts linux,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26316612/

10-13 03:33