一、Shell 特殊参数解释
首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_
#!/bin/bash
echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo $n # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo $# # 传递给脚本或函数的参数个数。
echo $* # 传递给脚本或函数的所有参数。
echo $@ # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo $? # 上个命令的退出状态,或函数的返回值。
echo $$ # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo $_ # 上一个命令的最后一个参数
echo $! # 后台运行的最后一个进程的 ID 号
执行
$ ./test.sh test test1 test2 test3 test4
./test.sh # $0
# $n
5 # $#
test test1 test2 test3 test4 # $*
test test1 test2 test3 test4 # $@
0 # $?
12305 # $$
12305 # $_
# $!
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号 ("") 包含时,都以"$1"“ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
但是当它们被双引号 ("") 包含时,"$*“会将所有的参数作为一个整体,以”$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数;" n"的形式输出所有参数;"@“会将各个参数分开,以”$1"“ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
二、方法1:$0,$1,$2…
采用$0,$1,$2…等方式获取脚本命令行传入的参数,值得注意的是,
0
获
取
到
的
是
脚
本
路
径
以
及
脚
本
名
,
后
面
按
顺
序
获
取
参
数
,
当
参
数
超
过
10
个
时
(
包
括
10
个
)
,
需
要
使
用
0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用
0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用{10},${11}…才能获取到参数。
示例2:新建一个test.sh的文件
#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"
执行结果如下:
$ ./test.sh 1 2
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2