1)$0
获取当前执行脚本的文件名包括路径
dirname $0 只取当前执行脚本的路径
basename $0 只取当前执行脚本文件名
2)$# 执行命令行(脚本)参数的总个数
3)$@ 这个执行程序的所有参数
4)$* 获取当前shell 的所有参数(注意与$@区别)
5)$! 上一个执行命令的PID
6)$$ 获取当前shell的PID
7) $_ 在此之前执行的命令或者脚本的最后一个参数
8)$? 上一个命令的退出状态
9)$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
下面的例子可以清楚的看到 $* 和 $@ 的区别:
#!/bin/bash
echo "\$*="$*
echo "\"\$*\"=""$*"
echo "\$@="$@
echo "\"\$@\"=""$@"
echo "print each param from\$*"
for varin$*
do
echo "$var"
done
echo "print each param from\$@"
for varin$@
do
echo "$var"
done
echo "print each param from\"\$*\""
for varin"$*"
do
echo "$var"
done
echo "print each param from\"\$@\""
for varin"$@"
do
echo "$var"
done
执行 ./test.sh "a" "b" "c" "d",看到下面的结果:$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d
退出状态
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。
退出时返回值的表示含义如下:
0 表示运行成功
2 权限拒绝
1~125 表示运行失败,脚本命令、系统命令或者参数传递错误
126 找到了该命令,但是无法执行
127 未找到要运行的命令
128 命令被系统强制结束