Shell编程之参数引用

原创 2013年12月04日 19:18:42

最近一直在学习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

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

相关文章推荐

linux shell编程指南第二十章------向脚本传递参数

前面已经讲到如何使用特定变量$ 1 . . $ 9向脚本传递参数。$ #用于统计传递参数的个数。可 以创建一个u s a g e语句,需要时可通知用户怎样以适当的调用参数调用脚本或函数。 简单地说...

linux基础之shell编程(3)-给脚本设置参数

bash的变量类型本地变量(局部变量) 环境变量 位置变量:$1,$2,$3, ... 特殊变量:$?,$#,$*,$@ 那让脚本拥有获取外界参数的能力就要用的位置变量,$1代表第一个参数,$2代表第...

第一部分 Shell基础编程——第七章 脚本参数传递

笔记 #位置参数可以超过9个 #shift n每个将参数位置向左偏移n位 #编辑文件 vi opt2 #ne 不等于 #lt 小于 #查看opt2文件内容 [root@localhost 0417]...
  • Wentasy
  • Wentasy
  • 2013年04月17日 16:58
  • 2070

linux shell编程if判断参数说明

shell 编程中使用到得if语句内判断参数

linux shell编程if语句内判断参数详解

shell 编程中使用到得if语句内判断参数   –b 当file存在并且是块文件时返回真   -c 当file存在并且是字符文件时返回真   -d 当pathname存在并且是一个目录时返回真   ...

shell编程连载【4】- 特殊参数

1 $$:显示PID编号 [tandesir@localhost shell]$ echo $ 8068 2 $?:退出状态 [tandesir@localhost shell]$ ech...

linux shell编程if语句内判断参数

shell 编程中使用到得if语句内判断参数   –b 当file存在并且是块文件时返回真   -c 当file存在并且是字符文件时返回真   -d 当pathname存在并且是一个目录时返回真...

Linux shell编程学习实例与参数分析

第一章:shell基础 ●umask   --查看当前用户创建文件或文件夹时的默认权限 eg: [test@szbirdora 1]$umask 0002 [test@s...

linux shell编程if语句内判断参数详解

第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中,上面的例子显示了怎么改变脚本,如果参数少于或者多余2个来打印出一条消息……   shell 编程中使用到得if语句...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shell编程之参数引用
举报原因:
原因补充:

(最多只允许输入30个字)