我开始尝试getopts,但遇到了一些错误。当我输入一个无效选项(如-A)时,程序输出不是它所需要的。

#!/bin/bash

function usage() {
    echo "Usage: $0 -h [database host] -d [test database name]"
    exit 1
}

while getopts “:h:d:” opt; do
  case ${opt} in
    h)
      db_host=$OPTARG
      ;;
    d)
      test_db=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" 1>&2
      usage
      exit 1
      ;;
    :)
      echo “Option -$OPTARG requires an argument.” 1>$2
      usage
      exit 1
      ;;
  esac
done
shift $((OPTIND-1))

if [ -z $db_host ] || [ -z $test_db ]; then
    usage
else
    echo "Your host is $db_host and your test database is $test_db."
fi

程序输出示例:
./opt.sh: illegal option -- A
Invalid option: -
Usage: ./opt.sh -h [database host] -d [test database name]

所以,基本上有两个问题:
1)我想彻底清除第一条错误消息。我想提供我自己的错误信息。
2)为什么我的脚本没有生成“Invalid option:-A”而不是“Invalid option:-”

最佳答案

options参数周围有错误类型的引号,它们是“卷曲引号”,而不是ASCII双引号。因此,getopts不是选项的第一个字符,因此您不会得到静默错误报告。
把它改成

while getopts ':h:d:' opt; do

关于linux - getopts没有将我的选项发送到标准输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37649488/

10-11 21:22