通过例子理解shell下使用getopts和getopt
脚本都是在网上获取的,只是拿按个人理解讲一下在写一些特殊脚本中可能要遇到获取可变参数的脚本,为了简化可能需要进行选项支持,下面了解下getopt及getopts在脚本中应该的例子讲解
getopts是为了让脚本支持短选项功能,而getopt长短选项都可以支持
脚本名为getopts.sh
#!/bin/bash
echo "$*"echo ---------------------------------while getopts ":a:bc:" optdo case $opt in "a") echo "a" $opt $OPTIND $OPTARG;; "b") echo 'b' $opt $OPTIND $OPTARG;; "c") echo 'c' $opt $OPTIND $OPTARG;; "?") echo "options error";; ":") echo "no value error";; esacdone echo $OPTINDshift $(($OPTIND-1))echo -------------------------------echo "$*"######################################以下面这样运行得到的结果就对$OPTIND、$OPTARG、?、:这几个选项的了解了。getopts最前的:表示忽略错误输出,可以去掉自己测试下,shift $(($OPTIND-1))表示把传入的第$OPTIND个参数变成$1sh getopts.shsh getopts.sh -dsh getopts.sh -ash getopts.sh -bsh getopts.sh -a 100sh getopts.sh -b 100sh getopts.sh -a100sh getopts.sh -a 100 23 #######################################脚本名为getopt.sh#!/bin/bashhelp(){ echo "need help"}mess(){ local mess=$1 echo "$mess"}ARGV=$( getopt -o hm: --long help,mess: -- "$@" )eval set -- "$ARGV"while truedo case "$1" in -h|--help) help shift ;; -m|--mess) mess"$2" shift ;; *) break ;; esacshiftdone###############################以下面方式运行下就可以了解了sh getopt.sh -hsh getopt.sh --mess="hello world"sh getopt.sh -m "hello world"sh getopt.sh -bsh getopt.sh -- -b ARGV就是命令替换eval就是获取上面的getopt命令得到的内容set 设置环境变量case $1就是set后得到getopt命令的第一个参数.-m|--mess选项用"$2"面不直接$2是为了防止选项参数有空格,这样输出就会出错了,可以去掉""测试下###############################
页:
[1]