我想使用我的shell脚本:
myscript.sh -key keyValue
如何获得 keyValue ?
我尝试了getopts
,但它要求key
是一个字母!
答案 0 :(得分:0)
使用手动循环,例如:
while :; do
case $1 in
-key)
shift
echo $1
break
;;
*)
break
esac
done
答案 1 :(得分:0)
无需使用getopts
:
while [ "$#" -gt 0 ]; do
case "$1" in
-key)
case "$2" in
[A-Za-z])
;;
*)
echo "Argument to $1 must be a single letter."
exit 1
;;
esac
keyValue=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
;;
esac
shift
done
如果你的shell是bash
,它可以像这样简化:
while [[ $# -gt 0 ]]; do
case "$1" in
-key)
if [[ $2 != [A-Za-z] ]]; then
echo "Argument to $1 must be a single letter."
exit 1
fi
keyValue=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
;;
esac
shift
done
答案 2 :(得分:0)
我真的认为值得学习getopts:从长远来看,你将节省大量时间。
如果您使用getopts,那么它需要短版本的交换机为单个字母,并以单个“ - ”为前缀;长版本可以是任何长度,并以“ - ”为前缀。因此,只要您对
感到满意,就可以使用getopts获得您想要的内容myscript.sh --key keyValue
这是getopts坚持的有用行为,因为这意味着您可以将许多交换机连接在一起。如果“ - ”表示短单字母开关,则“-key”表示与“-k -e -y”相同,这是一种有用的简写。