getopt(s):命令行选项、参数处理
getopts场景一:
脚本接收选项-a、-b,如果是-a,安装a服务,如果是b,安装b服务。
#!/bin/bash
#
# getopts不支持长选项
while getopts "ab" arg
do
case $arg in
a)
echo "install a"
;;
b)
echo "install b"
;;
?)
echo "Unkonw argument"
exit 1
;;
esac
done
getopts场景二:
-b选项需要指定一个参数
#!/bin/bash
#
#
while getopts "ab:" arg
do
case $arg in
a)
echo "a's arg is $OPTARG"
;;
b)
echo "b's arg is $OPTARG"
;;
?)
echo "Unknow argument"
exit 1
;;
esac
done
getopt场景一:
脚本接收短选项-a、-b 或长选项--servera、--serverb
#!/bin/bash
#
# getopt支持长选项
#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项
#如-carg 而不能是-c arg
#--long表示长选项
#"$@"在上面解释过
# -n:出错时的信息
# -- :举一个例子比较好理解:
#我们要创建一个名字为 "-f"的目录你会怎么办?
# mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用
# mkdir -- -f 这样-f就不会被作为选项
TEMP=`getopt -o ab --long servera,serverb -n "$0" -- "$@"`
[ $? -eq 0 ] || { exit 1; }
# set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了
eval set -- "$TEMP"
while true; do
case "$1" in
-a|--servera)
echo "install servera"
shift
;;
-b|--serverb)
echo "install serverb"
shift
;;
--)
shift
break
;;
*)
echo "Error"
exit 1
;;
esac
done
getopt场景二:
#!/bin/bash
#
#-b选项可以有一个可选参数,可选参数必须紧贴选项
TEMP=`getopt -o ab:: --long servera,serverb:: -n "$0" -- "$@"`
[ $? -eq 0 ] || { exit 1; }
echo "$TEMP"
eval set -- "$TEMP"
echo "$TEMP"
while true; do
case "$1" in
-a|--servera)
echo "install servera"
shift
;;
-b|--serverb)
case "$2" in
"")
echo "Option b, no argument"
shift 2
;;
*)
echo "Option c, argument is $2"
shift 2
;;
esac
;;
--)
shift
break
*)
echo "Error"
exit 1
esac
done