【发布时间】:2020-01-27 14:34:39
【问题描述】:
我正在编写 bash 脚本,它将根据提供的参数在本地或远程构建一个 docker 映像。
我正在努力检查提供的字符串是否等于“远程”或“本地”。
当我执行脚本时,它不接受任何数字,但它接受任何字符串。
!/bin/bash
usage() { echo "Usage: $0 [-m < local|remote>]" 1>&2; exit 1; }
while getopts "m:" o; do
case "${o}" in
m)
destination=${OPTARG}
((destination == "local" || destination == "remote")) || usage
;;
*)
usage
;;
esac
done
shift "$((OPTIND-1))"
echo $destination
【问题讨论】:
-
前段时间有人评论说你不应该使用 getopts 而是在大多数时候只使用普通的参数解析。我现在找不到突出显示原因的确切链接,但也许这就是正确的方法。
-
(( ))用于算术运算,[[ "$destionation" = local || "$destination" = remote ]]用于字符串比较 -
[[ "$destionation" = 本地 || "$destination" = remote ]] 添加这些以某种方式帮助了我。现在脚本只接受当前是“远程”的第二个值,但不幸的是它不接受第一个“本地”或“本地”或我称之为的任何其他值。它返回 usage() 的输出。
标签: string bash docker getopts