小编典典

如何在 Bash 中获取带有标志的参数

all

我知道我可以在 bash 中轻松获得这样的定位参数:

$0要么$1

我希望能够使用这样的标志选项来指定每个参数的用途:

mysql -u user -h host

通过标志而不是位置获得-u param价值和价值的最佳方法是什么?-h param


阅读 92

收藏
2022-04-01

共1个答案

小编典典

这是我常用的成语:

while test $# -gt 0; do
  case "$1" in
    -h|--help)
      echo "$package - attempt to capture frames"
      echo " "
      echo "$package [options] application [arguments]"
      echo " "
      echo "options:"
      echo "-h, --help                show brief help"
      echo "-a, --action=ACTION       specify an action to use"
      echo "-o, --output-dir=DIR      specify a directory to store output in"
      exit 0
      ;;
    -a)
      shift
      if test $# -gt 0; then
        export PROCESS=$1
      else
        echo "no process specified"
        exit 1
      fi
      shift
      ;;
    --action*)
      export PROCESS=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    -o)
      shift
      if test $# -gt 0; then
        export OUTPUT=$1
      else
        echo "no output dir specified"
        exit 1
      fi
      shift
      ;;
    --output-dir*)
      export OUTPUT=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    *)
      break
      ;;
  esac
done

要点是:

  • $#是参数的数量
  • while 循环查看所有提供的参数,在 case 语句中匹配它们的值
  • shift 带走了第一个。您可以在 case 语句中多次移动以获取多个值。
2022-04-01