linux $1 $2,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 ],括号的两边各需要有一个空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值