Shell Script简介

  Shell Script简介
 
[ 作者:  加入时间:2007-01-23 04:35:14  来自: Linux联盟收集整理 ]
 
 
 
 
Bourne Shell

一、变数

Bourne Shell的变数型态只有字串变数,所以要使用数值运算则必须靠外部命令达成目的。而其变数种类有下列几种:

1. 使用者变数

这是最常使用的变数,我们可以任何不包含空白字元的字串来当做变数名称。设定变数值时则用下列方式:

var=string

取用变数时则在变数名称前加上一"$" 号。



┌———————┐

│name=Tom │

│echo name │

│echo $name │

└———————┘

结果如下:

name

Tom

2. 系统变数(环境变数)

和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使用者变数设定为系统变数,只要加上:

export var

┌———————┐

│name=Tom │

│export name │

└———————┘

以下是使用者一进入系统之後就已设定好的系统变数:

$HOME 使用者自己的目录

$PATH 执行命令时所搜寻的目录

$TZ 时区

$MAILCHECK 每隔多少秒检查是否有新的信件

$PS1 在命令列时的提示号

$PS2 当命令尚未打完时,Shell 要求再输入时的提示号

$MANPATH man 指令的搜寻路径

3. 唯读的使用者变数

和使用者变数相似,只不过这些变数不能被改变。要将使用者变数设成唯读的,只要加上:

readonly var

而若只打readonly则会列出所有唯读的变数。还有一点,系统变数不可以设定成唯读的。



┌———————┐

│name=Tom │

│readonly name │

│echo $name │

│name=John │

│readonly │

└———————┘

结果如下:

Tom

name: is read only

readonly name

readonly ......

4. 特殊变数

有些变数是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它唯读的系统变数,而叫它特殊变数(有些书会叫它唯读的系统变数),因为这些变数是一执行程式时就有了,况且使用者无法将一般的系统变数设定成唯读的。以下是一些等殊变数:

$0 这个程式的执行名字

$n 这个程式的第n个参数值,n=1..9

$* 这个程式的所有参数

$# 这个程式的参数个数

$$ 这个程式的PID

$! 执行上一个背景指令的PID

$? 执行上一个指令的返回值

当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。除此之外,吾人可以用set 命令改变$n及$*,方法如下:

set string

如此$*的值即为string,而分解後则会放入$n。如果set 命令後面没有参数,则会列出所有已经设定的变数以及其值。

档名:ex1 参数:this is a test

┌———————————┐

│echo Filename: $0 │

│echo Arguments: $* │

│echo No. of args.: $# │

│echo 2nd arg.: $2 │

│shift │

│echo No. of args.: $# │

│echo 2nd arg.: $2 │

│set hello, everyone │

│echo Arguments: $* │

│echo 2nd arg.: $2 │

└———————————┘

结果如下:

Filename: ex1

Arguments: this is a test

No. of args.: 4

2nd arg.: is

No. of args.: 3

2nd arg.: a

Arguments: hello, everyone

2nd arg.: everyone

值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令:

read var1 var2.....

这时read会将一个字分给一个变数。如果输入的字比变数还多,最後一个变数会将剩下的字当成其值。如果输入的字比变数还少,则後面的变数会设成空字串。如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。

二、执行命令

在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。

1. 直接下命令

这个方式和在命令列中直接下命令的效果一样。

2. 使用sh命令



sh command

这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。除此之外和直接下命令的方式一样。

3. 使用"."命令

. command

这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。

4. 使用exec命令



exec command

此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。

5. 使用命令替换

这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个"`" 号之间,而Shell 会以这个命令执行後的输出结果代替这个命令以及两个"`" 符号。



str='Current directory is '`pwd`

echo $str

结果如下:

Current directory is /users/cc/mgtsai

这个意思是pwd 这个命令输出"/users/cc/mgtsai",而後整个字串代替原来的`pwd` 设定str 变数,所以str 变数的内容则会有pwd 命令的输出。

number=`expr $number + 1`

这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方

式不可。这个例子是将number变数的值加1 後再存回number变数。

三、流程控制

在介绍流程控制之前,我们先来看看test命令。test命令的参数是条件判断式,当条件为真时则传回非零值,而条件为伪时则传回零。在所有的流程控制都必须用到test命令来判断真伪。而test命令的使用方法则列於附录B。

test $# = 0

如果执行这个程式没有参数时,会传回非零值代表"$# = 0"这个条件成立。反之则会传回零。

以下介绍各种流程控制:

1. if then 

语法以及流程图如下

│ FALSE

if (condition) <condition>—┐

then │TRUE │

then-commands then-commands │

fi ├————┘



condition 是一个test命令。往後所介绍的各种流程中的condition 都是test

命令。

档名:chkarg

┌———————————┐

│if (test $# != 0) │

│ then │

│ echo Arg1: $1 │

│fi │

└———————————┘

$ chkarg Hello

Arg1: Hello

$ chkarg

$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值