shell getopts

getopts

  getopts是一个命令行解析工具,是shell script支持参数解析。

getopts用法:

getopts optstring name [args]

说明:

  optstring:表示有那些选项和参数(选项后加":"表示选项后面需要加参数)。

  name: 存放选项的变量。

Example:

shell script解析命令行

#!/bin/bash
status=off         #定义变量status,初始值设置为off
filename=""       #定义变量filename,用于保存选项参数(文件)
output=""         #定义变量output,用于保存选项参数(目录)
usage () {         #定义函数Usage,输出脚本使用方法
  echo "myscript [-h] [-v] [-f <filename>] [-o <filename>]"
}
while getopts :hvf:o: varname
# getopts: 此脚本有-h、-v、-f、-o四个选项,-f和-o后面需要跟参数.
do
  case $varname in
  h)
   usage
   exit 0
   ;;
  v) status=on;;
  f)
	filename=$OPTARG          #将选项的参数赋值给filename
	if [ ! -f $filename ];then        #判断选项所跟的参数是否存在且是文件
		echo "the source file $filename not exist!"
		exit
	fi
	;;
  o)
	output=$OPTARG           #将选项参数赋值给output
	if [ ! -d $output ];then        #判断选项参数是否存在且是目录
		echo "the output path $output not exist"
		exit
	fi
	;;
  :)                        #当选项后面没有参数时,varname的值被设置为(:),OPTARG的值被设置为选项本身
   usage
   err 1 "the option -$OPTARG require an arguement"  # 提示用户此选项后面需要一个参数
   ;;
  ?)                  		#当选项不匹配时,varname的值被设置为(?),OPTARG的值被设置为选项本身
   usage
   err 1 "Invaild option: -$OPTARG"  # 提示用户此选项无效
   ;;
  esac
done

执行结果:

$ ./test.sh -vf ./test -o ./abc
The source file ./test doesn't exist!
 

说明:

  hvfo:是选项

  第一个":":getopts会区分invalid option错误和miss option argument错误;

       当为invalid option时,name会被设成"?",$OPTARG时有问题的选项;

       当为miss option argument时,name会被设成":",$OPTARG时有问题的选项。

       如果optstring不是以":"号开头,invalid option和miss option argument都会时name变成"?",$OPTARG时有问题的选项。所以建议选项以":"开头。

  其中hv为普通选项,可以不带参数值,如果带了无法获取;fo为后面带参数的值,参数值会存放在OPTARG这个变量中;选项赋值给[args]。

  

 

posted @ 2022-11-07 11:18  zhuang6  阅读(85)  评论(0编辑  收藏  举报