$# 获取当前shell命令中参数的总个数
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9.
$* 获取当前shell的所以参数$1 $2 $3 ....注意与$#的区别 ,是将所有的命令行所有参数视为单个字符,等同于“$1$2$3”
$$获取当前shell的命令行中的参数总个数
$! 执行上一个指令的PID
$@ 这个程序的所有参数,是将所有命令行每个参数视为单独的字符串,等同于"$1" "$2" "$3",这是将参数传递给其他的程序的最佳方式,因为他会保留所有内嵌每个参数里的任何空白。
$_ 在此之前执行的命令或者脚本的最后一个参数
在脚本调用,一般用exit 0或者函数return 0.
#?
返回值:
0 表示成功
2 表示权限拒绝
1~25 表示运行失败,脚本命令、系统命令错误或者参数传递错误。
126 找到该命令了,但是无法执行
127 未找到要运行的命令。
>128 命令被系统强制结束
$$
[root@PXE shell_scrpit]# cat 2.sh
echo $$ >/1.logwhile truedo uptime sleep 2doneecho $$ >2.1log[root@PXE shell_scrpit]# sh 2.sh &
[1] 21525[root@PXE shell_scrpit]# 21:31:16 up 1 day, 6:31, 5 users, load average: 0.05, 0.02, 0.00[root@PXE /]# cat 1.log #此时可以看出当前的进程号也就是2.sh
21525You have new mail in /var/spool/mail/root[root@PXE /]# kill 21525 #直接杀死进程号[root@PXE shell_scrpit]# cat all.sh
echo '$0 获取当前执行的shell脚本的文件名:' $0
echo '$n 获取当前执行的shell脚本的第n个参数值,n=1..9:' '$1'=$1 '$2'=$2 '$3'=$3
echo '$* 获取当前shell的所以参数$1 $2 $3 ....注意与$#的区别:' $*
echo '$$获取当前shell的命令行中的参数总个数:' $#
sleep 2 &
echo '$! 执行上一个指令的PID:' $!
echo '$@ 这个程序的所有参数:' $@
echo '$_ 在此之前执行的命令或者脚本的最后一个参数:' $_
[root@PXE shell_scrpit]# sh all.sh cmz leco icpc
$0 获取当前执行的shell脚本的文件名: all.sh
$n 获取当前执行的shell脚本的第n个参数值,n=1..9: $1=cmz $2=leco $3=icpc
$* 获取当前shell的所以参数$1 $2 $3 ....注意与$#的区别: cmz leco icpc
$$获取当前shell的命令行中的参数总个数: 3
$! 执行上一个指令的PID: 21937
$@ 这个程序的所有参数: cmz leco icpc
$_ 在此之前执行的命令或者脚本的最后一个参数: icpc
[root@PXE shell_scrpit]# set -- "I am" a boy.
You have new mail in /var/spool/mail/root[root@PXE shell_scrpit]# echo #*[root@PXE shell_scrpit]# echo $#3 [root@PXE shell_scrpit]# for i in $@;do echo $i;doneIamaboy.[root@PXE shell_scrpit]# for i in $*;do echo $i;done #Iamaboy.[root@PXE shell_scrpit]# for i;do echo $i;done #去掉 in 变量列表。相当于in “$@”
I amaboy.[root@PXE shell_scrpit]# for i in "$@";do echo $i;done#在没有双引号的情况下。参数里引号内容当做一个参数输出,这才真正符合我们传入参数的需求。set -- "I am" a boy。
I amaboy.[root@PXE shell_scrpit]# for i in "$*";do echo $i;done#技术了双引号,$*表示一个字符串
I am a boy.