shell脚本中$!、$@、$#、$$、$0、$1、$2、$*的含义

亡梦爱人 提交于 2020-01-15 12:55:05

一、shell脚本中$!、$@、$#、$$、$0、$1、$2、$*的含义

$! :Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)

$#:添加到shell当中参数的个数

$$:Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)

$0:脚本本身的文件名

$1:传到Shell当中的第一个参数

$2:传到Shell当中的第二个参数

$*:所有参数列表。如$*用" "括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个;若不加" ",那么$*与$@的输出结果相同

$@:所有参数列表。如$@用" "括起来的情况、以"$1" 、"$2"、 … "$n" 的形式输出所有参数。

 

脚本举例:

echo "number:" $#
echo "PID:" $$
echo "sname:" $0
echo "first:" $1
echo "second:" $2
echo $@  
echo $*  

echo ""
echo "=========="
n=1
for i in "$@"
do
  echo "$n : " $i
  let n+=1
done

echo ""
echo "=========="
n=1
for i in "$*"
do
  echo "$n : " $i
  let n+=1
done

echo ""
echo "=========="
n=1
for i in $*
do
  echo "$n : " $i
  let n+=1
done

 结果:

# ./value.sh 1 2 3 4 
number: 4
PID: 5445
sname: ./value.sh
first: 1
second: 2
1 2 3 4 
1 2 3 4 

==========
1 :  1
2 :  2
3 :  3
4 :  4

==========
1 :  1 2 3 4

==========
1 :  1
2 :  2
3 :  3
4 :  4
 

分析: 

$#:传给脚本的参数个数

$$:脚本自己的PID号 

$0:脚本自身的名字

$1 ~ $n:参数1 ~ 参数n 

$@与$*的区别:

  $@与$*都可以使用一个变量来来表示所有的参数内容,但这两个变量之间有一些不同之处。

  $@:将输入的所有参数作为一个列表对象

  $*:将输入的所有参数作为一个变量    

在上面的例子中,使用$@与$*是,都是用双引号引起来,但当$*不使用双引号时,结果与$@的结果相同。 

 

二、关于$? 

$?:获取函数的返回值或者上一个命令的退出状态 。如果成功就是0,失败为1。

 在脚本中,我们常用if [ $? -eq 0 ] 来判断一个命令有没有执行成功。

 

示例: 

ps -fe | grep test | grep -v grep
if [ $? -eq 0 ]
then
    echo "Process test is running!"
else
    echo "Process test don not run!"
fi

 注意,if后面的中括号[  $? -eq 0 ],括号的两边各需要有一个空格。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!