我有一个代码:
while getopts ab:cde:f opt
do
case ${opt} in
b|e)
[[ ${OPTARG} = -* ]] && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"- ${opt}!\""
[[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}"
;;
esac
case $opt in
a) minusa=$opt;;
b) minusb=$opt
file_b=$OPTARG;;
c) minusc=$opt;;
d) minusd=$opt;;
e) minuse=$opt
file_e=$OPTARG;;
f) minusf=$opt;;
/?) echo Unrecognized parameter
exit 1;;
esac
done
echo "minusa:$minusa","minusb:$minusb","file_b:$file_b","minusc:$minusc","minusd:$minusd","minuse:$minuse","file_e:$file_e","minusf:$minusf"
简单的代码,只是为了理解getopts
命令的行为。当我运行脚本时:
./eg2 -b -f
./eg2: line 7: usage: command not found
minusa:,minusb:b,file_b:-f,minusc:,minusd:,minuse:,file_e:,minusf:
选项-b
的参数为-f
。我想要打印:
[[ ${OPTARG} = -* ]] && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\""
在代码中我到底出错了?对于选项-b
和-e
,如果没有参数,我想打印:
[[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}"
请解释一下。
答案 0 :(得分:1)
你在getopts
行的“b”后面放了一个“:”。这告诉它期待之后的争论。如果您不希望将下一个参数视为-b
的参数,请删除“:”。
答案 1 :(得分:0)
[[ "${OPTARG}" =~ "^-[a-z]" ]] && echo "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\""
解决了这个问题......谢谢