这是我的第一个问题。
我正在尝试制作一个带有选项的小脚本,并且我正在getopts
这样做。奇怪的是:
参数不会分配给变量,或者它总是进入if
代码块(这似乎是问题)。
这是脚本:
#!/bin/bash
function work () {
echo "It Works" }
function help () {
echo "Print some help and options" }
while getopts ha:b: OPT; do
case $OPT in
-h)
help
exit
;;
-a)
OPTA=$OPTARG
;;
-b)
OPTB=$OPTARG
;;
\?)
help
break
;;
esac done
echo $OPTB
if [[ -z $OPTB ]]; then
echo "ERROR. Needs OPTB"
fi
if [[ -n $OPTB ]]; then
echo "All OK untill here"
work
fi
它总是打印错误消息。
答案1
getopts
从选项中删除“-”号。
所以你需要:
while getopts ha:b: OPT; do
case $OPT in
h)
help
exit
;;
a)
....
getopts
请记住在调用( )之前清除变量,unset OPTA OPTB
因为它们可能位于脚本接收的环境中。另请考虑调用脚本-b ""
是否有效的情况,因为您[[ -z $OPTB ]]
无法区分“无-b
选项”和“-b
带空参数的选项”。