Shell编程之参数引用

最近一直在学习Nutch-2.2.1,在阅读crawl和nutch脚本时,总是遇到美元符号$后面跟一些数字、问号之类的表示方式,对于后面跟数字的情况,之前略有了解,表示脚本执行时后跟的参数,比如0表示脚本的名称,1表示第一个参数,2表示第二个参数,以此类推等等,但是对于问号、叹号、星号就不是特别清楚了,在网上查阅了一些文章,但一般都缺少代码参考,所以自己就编写了测试脚本,基本涵盖了脚本参数的使用方式。下面先列出脚本参数的含义,然后再执行脚本看看实际的执行情况。

 

$0表示执行脚本的名称,比如在终端窗口执行./start.sh,则$0的值为start.sh

 

$n(n=1,2,3,……)为执行脚本时后面所跟的参数,比如在终端窗口执行./start.sharg1 arg2,则$1的值为arg1,$2的值为arg2。

 

$#表示执行脚本后面所跟的参数个数,注意不包括脚本本身在内,比如在上面所举的第二个例子中,$#的值为2。

 

$$表示该脚本执行时,操作系统分配给其的PID,也就是进程ID。

 

$!表示最后一个在后台执行的进程的PID

 

$*表示脚本后面的所有参数,这些参数被作为一个单词。

$@与$*同义,但是参数被作为单独的单词,而不是一个单词。

$@与$*的区别只有在被双引号括起来时才会表现起来,否则二者的效果是一样的

 

$?表示脚本中执行上一个指令、脚本或者函数的结果,通常用于判断是否正确退出,0表示正确,非0表示执行过程错误。

下面看一段具体的代码,然后看看输出结果,重点看一下$@与$*的相同于不同之处

#!/bin/bash

echo $0
echo $#
echo $$
ls /home/hadoop > /dev/null
echo $?

i=1
for arg in "$*"
   do
      echo "arg$i=$arg"
      let i=i+1
done
echo 
i=1
for arg in "$@"
  do
    echo "arg$i=$arg"
    let i=i+1
done
echo 
i=1
for arg in $*
  do
     echo "arg$i=$arg"
     let i=i+1
done
[hadoop@hadoop code]$ ./shellArg.sh arg1 arg2 arg3 agr4 arg5 arg6 arg7 arg8 arg9 arg10 arg11
./shellArg.sh
11
3280
0
arg1=arg1 arg2 arg3 agr4 arg5 arg6 arg7 arg8 arg9 arg10 arg11

arg1=arg1
arg2=arg2
arg3=arg3
arg4=agr4
arg5=arg5
arg6=arg6
arg7=arg7
arg8=arg8
arg9=arg9
arg10=arg10
arg11=arg11

arg1=arg1
arg2=arg2
arg3=arg3
arg4=agr4
arg5=arg5
arg6=arg6
arg7=arg7
arg8=arg8
arg9=arg9
arg10=arg10
arg11=arg11

可以看到当$*没有双引号括起来时其效果跟$@是一样的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyWalker_ONLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值