Linux Shell脚本的具名传参

天锦 发表于 码农也得有格调 分类,标签:

在linux shell中编写的脚本,在需要传参的时候,通常是在脚本后面用空格隔开各个参数,从而实现把参数传到脚本里面:

[root@public ~]# bash myscript.sh param1 param2 param3

在脚本中通过$1、$2、$3这样一个美元符号加数字获取参数

#!/bin/bash

echo "param1 is $param1"
echo "param2 is $param2"
echo "param3 is $param3"

可以看出,这种传参方式是强顺序相关的,当需要的参数多了之后,使用体验就会变的很糟糕。

可以使用getopts进行具名获取

#!/bin/bash
while getopts ":sn:i:d:p:" opt; do
    case $opt in
    n)
        echo "选项-$opt的值是$OPTARG"
        ;;
    s)
        echo "选项-$opt"
        ;;
    d)
        echo "选项-$opt的值是$OPTARG"
        ;;
    i)
        echo "选项-$opt的值是$OPTARG"
        ;;
    p)
        echo "选项-$opt的值是$OPTARG"
        ;;
    :)
        echo "选项-$OPTARG后面需要一个参数值"
        exit 1
        ;;
    ?)
        echo "无效的选项 -$OPTARG"
        exit 2
        ;;
    esac
done

注意getopts是shell内建命令,支持从单字符的传参,如-u parameter1,如果是-url parameter1则不支持。可以换用getopt。

0 篇评论

发表我的评论