Shell中带$的特殊变量及对位置参数循环
特殊变量列表
$0 当前脚本的文件名 $n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如第一个参数是$1,第二个参数是$2 当参数个数大于9时,用${n}表示,例如${10}表示第10个参数,如果写成$10则表示第一个参数,后边跟一个0; $# 传递给脚本或函数的参数个数。 $? 上个命令的退出状态,或函数的返回值。 $$ 当前shell进程ID.对于shell脚本,就是这些脚本所在的进程ID $* 传递给脚本或函数的所有参数。$*被双引号包含时,"$*"会将所有的参数作为一个整体,也就是说函数认为是一个参数。 $@ 传递给脚本或函数的所有参数。将各个参数分开,以"$1" "$2" ... "$n" 的形式输出所有参数。详见下列例子。
"${@}"、${@}、"${*}"、${*}的区别
shell脚本
#!/bin/bash func () { echo " length: ${#}" n=1 while ((n<=${#})) do echo ${!n} ((n++)) done } echo -n '"${@}"' func "${@}" echo -n '"${*}"' func "${*}" echo -n '${@}' func ${@} echo -n '${*}' func ${*}
运行结果:例如"${*}" length: 1,函数认为"${*}"是一个参数
[root@iZ2zehhv8p7sdfow4xil5yZ positionalparameter]# ./indirectreference.sh -a are "${@}" length: 2 -a are "${*}" length: 1 -a are ${@} length: 2 -a are ${*} length: 2 -a are
shell中对位置参数循环
引用于https://blog.csdn.net/m0_37886429/article/details/89280852
一、while+shift
#!/bin/bash while (($#>0)) do echo $1 shift done
二、for循环 # "$@"表示参数列表
#!/bin/bash for i in "$@" do echo $i done
三、间接引用 ${!i}
#!/bin/bash i=1 while ((i<=$#)) do echo ${!i} ((i++)) done
四、简介变量引用
#!/bin/bash i=1 while ((i<=$#)) do eval parameter=\$$i echo ${parameter} let i++ done
Linux中Shell自定义可指定参数名和参数值
脚本如下:
#!/bin/bash func () { while getopts "a:b:c:" arg do case "$arg" in a) echo "-a all value $OPTARG" ;; b) echo "-b value $OPTARG" ;; c) echo "-c value$OPTARG" ;; ?) echo " invalid option" exit 1 ;; esac done } func "${@}"
输出结果如下:
[root@iZ2zehhv8p7sdfow4xil5yZ hyang]# ./test1.sh -a are -b you -a all value are -b value you