$# 是传给脚本的参数个数 $0 是脚本自己的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的全部参数的列表 $* 是以一个单字符串显示全部向脚本传递的参数,与位置变量不一样,参数可超过9个 $$ 是脚本运行的当前进程ID号 $! 是最后运行的后台Process的PID $? 是显示最后命令的退出状态,0表示没有错误,其余表示有错误
脚本:java
#!/bin/bash # args test echo "title: $0" echo "total args: $#" echo "first args: $1" echo "second args: $2" echo "all args: $@" echo "all args: $*" echo "currnet pid:$$" echo "status: $?"
结果:shell
[root@localhost src]# sh java18 1 2 3
title: java18
total args: 3
first args: 1
second args: 2
all args: 1 2 3
all args: 1 2 3
currnet pid:4005
status: 0
-----------------------------------------------------------------------------------------------------
bash
区别:"@"和 "*"spa
相同点:都是引用全部参数.net
不一样点:只有在双引号中体现出来,假如脚本中运行时写入了三个参数(1 2 3)则 “*”等价于“123”(至关于传递了一个参数)而“@” 等价于传递了“1” “2” “3” (传递了三个参数)code
3"进程
脚本:字符串
#!/bin/bash # total args a=$# for((i=0;i<$a;i++)) do echo "$i" done echo "---- $ @----" for var in $@ do echo "$var" done echo "----$ *----" for va in $* do echo "$va" done echo "---- " $ @ "----" for var1 in "$@" do echo "$var1" done echo "---" "----" for va1 in "$*" do echo "$va1" done
运行结果:get
[root@localhost src]# sh java19 1 2 3
0
1
2
---- $ @----
1
2
3
----$ *----
1
2
3
---- $ @ ----
1
2
3
--- ----
1 2 3
it