• 参数个数

    $#
    
  • 单个参数获取

    $0 程序本身
    $1 第一个参数
    
  • 多个参数获取

    for i in "$*"; do
    case $i in
      --tls)
      HTTP="https"
      TLS="--tls.certfiles=${FABRIC_CA_CLIENT_HOME}/msp/cacerts/localhost-7054.pem"
      ;;
    esac
    done
    
  • getopts

    while getopts 'ah:j:m:u' OPT; do
    case $OPT in
        a) echo "all"
        j) JAVA_DIR="$OPTARG";;
        m) MAVEN_DIR="$OPTARG";;
        u) upload="true";;
        h) usage;;
        ?) usage;;
    esac
    done
    

    getopts后面跟的字符串就是参数列表,每个字母代表一个选项,如果字母后面跟一个:就表示这个选项还会有一个值,比如上面例子中对应的-j /home/soft/java 和-m /home/soft/maven 。而getopts字符串中没有跟随:的字母就是开关型选项,不需要指定值,等同于true/false,只要带上了这个参数就是true。

getopts识别出各个选项之后,就可以配合case进行操作。操作中,有两个"常量",一个是OPTARG,用来获取当前选项的值;另外一个就是OPTIND,表示当前选项在参数列表中的位移。case的最后一项是?,用来识别非法的选项,进行相应的操作,我们的脚本中输出了帮助信息。

  • shift 位置参数可以用shift命令左移。 比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。 非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。

  • 判断参数是否为空

    if [ ! -n "$1" ]; then
        echo Please Enter parm1 and parm2
        exit
    fi