参数个数
$#
单个参数获取
$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