shell 脚本参数处理

dazhi00 2019-06-21

shell 脚本参数处理

默认参数变量

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数 如 "1 2 3"
$@ 分别取出参数 如 "1" "2" "3"
$?上一个命令的退出状态
$-
$_
$!
$[0-9] 用户第n个参数参数

常用处理方式

  • 手动处理 只能通过 内建参数来获取处理

  • getopts 内建工具,不能处理长参数

  • getopt 支持长短参数

getopt

系统内建的工具,只能处理短参数

getopt 用法

-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。
-n选项后接选项解析错误时提示的脚本名字

示例

ARGS=`getopt -o g:p:n:i:v:u:s: -l namespace:,project:,name:,pipeline:,version:,url:,sys: -- "$@"`
# 如果ARGS 语句失败 直接退出 返回 错误
if [ $? != 0 ]; then
        echo "Fail to get args."
        exit 1
fi
# 转换参数格式 --long=a => --long a
eval set -- ${ARGS}

while true
do
    case "$1" in
        -g|--namespace)
            NAMESPACE=$2  # 取值赋值
            shift 2       # 向后偏移2位 删除第一个参数和参数值
            ;;
        -p|--project)
            PROJECT=$2
            shift 2
            ;;
        -n|--name)
            NAME=$2
            shift 2
            ;;
        -i|--pipeline)
            PIPELINE=$2
            shift 2
            ;;
        -v|--version)
            VERSION=$2
            shift 2
            ;;
        -u|--url)
            URL=$2
            shift 2
            ;;
        -s|--sys)
            SYSNAME=$2
            shift 2
            ;;
        --)
            shift
            break
            ;;
     esac
done

相关推荐