shell编程 Shell script 的默认变量($0, $1...)

Shell script 的默认变量($0, $1...)

我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限。那么 shell script 能不能在脚本文件名后面带有参数呢?很有趣喔!举例来说,如果你想要重新启动系统登录文件的功能,可以这样做:

[root@www ~]# file /etc/init.d/syslog

/etc/init.d/syslog: Bourne-Again shell script text executable

# 使用 file 来查询后,系统告知这个文件是个 bash 的可执行 script 喔!

[root@www ~]# /etc/init.d/syslog restart

    restart 是重新启动的意思,上面的指令可以”重新启动 /etc/init.d/syslog 这个程序”的意思! 唔!那么如果你在 /etc/init.d/syslog 后面加上 stop 呢?没错!就可以直接关闭该服务了!这么神奇啊? 没错啊!如果你要依据程序的执行给予一些变量去进行不同的任务时,本章一开始是使用 read 的功能!但 read 功能的问题是你得要手动由键盘输入一些判断式。如果透过指令后面接参数, 那么一个指令就能够处理完毕而不需要手动再次输入一些变量行为!这样执行指令会比较简单方便啦!

script 是怎么达成这个功能的呢?其实 script 针对参数已经有设置好一些变量名称了!对应如下:

/path/to/scriptname  opt1  opt2  opt3  opt4

       $0                          $1      $2       $3    $4

这样够清楚了吧?执行的脚本文件名为 $0 这个变量,第一个接的参数就是 $1 啊~ 所以,只要我们在 script 里面善用 $1 的话,就可以很简单的立即执行某些指令功能了!除了这些数字的变量之外, 我们还有一些较为特殊的变量可以在 script 内使用来调用这些参数喔!

$# :代表后接的参数”个数”,以上表为例这里显示为” 4 “;

$@ :代表” "$1" "$2" "$3" "$4" “之意,每个变量是独立的(用双引号括起来);

$* :代表” "$1c$2c$3c$4" “,其中 c 为分隔字符,默认为空格键, 所以本例中代表” "$1 $2 $3 $4" “之意。

那个 $@ 与 $* 基本上还是有所不同啦!不过,一般使用情况下可以直接记忆 $@ 即可!

好了,来做个例子吧~假设我要执行一个可以携带参数的 script ,执行该脚本后屏幕会显示如下的数据:

程序的文件名为何?

共有几个参数?

若参数的个数小于 2 则告知使用者参数数量太少

全部的参数内容为何?

第一个参数为何?

第二个参数为何 ?

[root@www scripts]# vi sh07.sh

#!/bin/bash

# Program:

#  Program shows the script name, parameters...

# History:

echo "The script name is        ==> $0"

echo "Total parameter number is ==> $#"

[ "$#" -lt 2 ] && echo "The number of parameter is less than 2.  Stop here."  && exit 0

echo "Your whole parameter is   ==> '$@'"

echo "The 1st parameter         ==> $1"

echo "The 2nd parameter         ==> $2"

源程序如下:

1 echo "The script name is        ==> $0"
2 echo "Total parameter number is ==> $#"
3 [ "$#" -lt 2 ] && echo "The number of parameter is less than 2.  Stop here."  && exit 0
4 echo "Your whole parameter is   ==> '$@'"
5 echo "The 1st parameter         ==> $1"
6 echo "The 2nd parameter         ==> $2"

创建shell文件,并命名为shell07.sh

回车(Enter),用vi编辑器编写shell07.sh

执行结果如下:

 

posted @ 2015-05-12 21:29  竹立荷塘  阅读(1278)  评论(0编辑  收藏  举报