shell getopts
2023-09-11 14:16:16 时间
用getopts命令获取到脚本选项后,getopts会将获取到的选项所对应的参数(选项对应的参数,并不是选项本身,有的命令选项后面是需要跟一个参数的,例如tcpdump 的-w选项,后面需要指定一个文件来保存抓包数据)自动保存到OPTARG这个变量中。
getopts命令格式:getopts OPTSTRING VARNAME
OPTSTRING:告诉getopts会有哪些选项和参数(用选项后面加“:”来表示选项后面需要加参数)
VARNAME:保存getopts获取到的选项
#!/bin/env sh
function Usage(){
echo -e "\e[1;31;47mUsage: $0 [-a] [-b <arg>] [-c]\e[0m"
return 0
}
while getopts :ab:c opt
do
case "$opt" in
a)
echo "Found -$opt option!"
;;
b)
echo "Found -$opt option!,with parameter value $OPTARG!"
;;
c)
echo "Found -$opt option!"
;;
:) # 没有选项参数时,opt置为 : ,OPTARG变成选项
echo "Option -$OPTARG need parameter!"
Usage
;;
?) # 没有该选项是,opt置为 ? ,OPTARG变成选项
echo "Option -$OPTARG invalid"
Usage
;;
*)
echo "Unknow option: -$OPTARG"
;;
esac
done
echo $*
#!/bin/env sh
status=off
filename=''
output=''
function usage(){
echo -e "\e[1;31;47mUsage: $0 [-h] [-v] [-f <filename>] [-o <filename>]\e[0m"
# exit -1
}
while getopts ':hvf:o:' var
do
case $var in
h)
echo $var
usage
exit -1
;;
v)
echo $var
status=on
echo $status
# exit -1
;;
f)
echo $var
echo $OPTARG
filename=$OPTARG
if [ ! -f $filename ];then
echo "the source file $filename not exists nor $filename is not regular file!"
# exit -1
fi
;;
o)
echo $var
echo $OPTARG
output=$OPTARG
if [ ! -d $output ];then
echo "the output path $output not exists!"
# exit -1
fi
;;
:)
echo $var
echo "the option -$OPTARG require an arguement"
usage
# exit 2
;;
?)
echo $var
echo "Invaild option: -$OPTAGR"
usage
# exit 2
;;
*)
echo default
usage
# exit 3
;;
esac
done
echo after circulation