如何检查 GETOPTS 提供的参数值是否等于特定字符串?
How can I check if the value of argument provided from GETOPTS is equal to specific string?
我正在编写 bash 脚本,它将根据提供的参数在本地或远程构建 docker 图像。
我正在努力检查提供的字符串是否等于 "remote" 或 "local"。
当我执行脚本时,它不接受任何数字,但它接受任何字符串。
!/bin/bash
usage() { echo "Usage: [=10=] [-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
所以你真正需要做的唯一改变就是按照@Nahuel Fouilleul 的建议将你的 ((...))
语句更改为 [[ ... ]]
语句,并将 $
添加到你的目标变量中.但是,他们的建议对您不起作用,因为目的地拼写错误。我有如下所示的更新代码。
#!/bin/bash
usage() { echo "Usage: [=10=] [-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
但是,您不需要在 switch 语句中检查此信息,您可以检查代码的主要部分并确保已使用参数扩展设置了目的地:
...
m)
destination=${OPTARG}
;;
...
[[ ${destination:?A destination is required.} == "local" || ${destination} == "remote" ]] || usage
echo $destination
我正在编写 bash 脚本,它将根据提供的参数在本地或远程构建 docker 图像。
我正在努力检查提供的字符串是否等于 "remote" 或 "local"。
当我执行脚本时,它不接受任何数字,但它接受任何字符串。
!/bin/bash
usage() { echo "Usage: [=10=] [-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
所以你真正需要做的唯一改变就是按照@Nahuel Fouilleul 的建议将你的 ((...))
语句更改为 [[ ... ]]
语句,并将 $
添加到你的目标变量中.但是,他们的建议对您不起作用,因为目的地拼写错误。我有如下所示的更新代码。
#!/bin/bash
usage() { echo "Usage: [=10=] [-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
但是,您不需要在 switch 语句中检查此信息,您可以检查代码的主要部分并确保已使用参数扩展设置了目的地:
...
m)
destination=${OPTARG}
;;
...
[[ ${destination:?A destination is required.} == "local" || ${destination} == "remote" ]] || usage
echo $destination