一、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个),需要使用 010(10)使{10},${11}…才能获取到参数。

示例2:新建一个test.sh的文件

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

执行结果如下:

$ ./test.sh 1 2
 
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2
Logo

更多推荐