Shell脚本(2)之条件测试和流程控制

来源:互联网 发布:tw 域名yaoqiu 编辑:程序博客网 时间:2024/05/17 22:59

Shell脚本(2)之条件测试和流程控制

条件测试:

test命令,作用:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数字,0真,非0假

语法:#test 测试条件

测试类型主要有:测试文件状态,字符串比较,整数值比较,逻辑测试

1.测试文件的状态:格式   #参数  文件或目录

参数:

-d  测试是否为目录                        -e  测试目录或文件是否存在

-f   测试是否为文件                       -r  测试当前用户是否有权限读取

-w  测试当前用户是否有权限写该文件

-L   测试是否为符号连接文件

-x  测试当前用户是否可执行该文件

Eg:#[ -d  /etc ] &&echo “111”

2.整数值比较:格式           #[ 整数  操作符  整数]

操作符:

-eq  等于                 -ne  不等于               -gt  大于

-lt     小于                 -le   小于或等于        -ge 大于或等于

3.字符串比较:语法:[字符串1  参数  字符串2]

参数:

=  字符串内容相同,!表示相反

-z    字符串内容为空

4.逻辑测试:语法  :#[表达式1] 参数 [表达式2]

参数:

-a或&&:逻辑与,而且的意思,前后两个表达式都成立时整个测试结果才是真,否则为假

-0或||:逻辑或,或者的意思,操作符两边至少一个为真时,结果为真,否则结果为假

!:逻辑否,当指定的条件不成立,返回结果为真

 

 

条件判断if for case while

If结构:

其结构有三种:

①--单判断:注意,这种格式中当if和then在同行时,条件结尾必须有连着的分号。不在时,则没有

if ... ; then

commands

fi

不在同一行时:

if ...

then

commands

fi

②--双判断:

if ...; then

commands1

elseif ...; then

commands2

else

commands3

fi

③--多判断:三层及三层以上的判断,对前面的双判断进行扩展即可

 

Case结构

然,多种情况的处理可以使用if进行判断,但是,case使用起来处理效果更佳

 

①--case结构:注意,每行的末尾有空格,且以“;;”结尾

 

case $arg in

pattern | sample) commands ;;

pattern) commands ;;

1) commands1 ;;

2) commands2 ;;

*) commands3(default) ;;

esac

 

上面的pattern是选择的具体表达式:*代表任何字符;?代表任何字元;[abc]代表a、b、c中的任何一个;

[a-n]代表从a到n的任何一个字元;|代表多重选择

 

For结构:

①--for结构1:sequence格式

for arg in sequence(实际的变量序列,以空格分隔)

do

commands

done

②--for结构2:C语言格式

for((赋初值;条件;自增/自减))

do

commands

done

 

累加可以表示为i=$(($i+1))

 

while结构

while [条件]

do

commands

done

其中bread和continue和java等语言表示一样,都是分别表示break结束循环—不再循环;跳出本次循环,进行下次—继续循环

 

Shift,表示迁移,参数做迁移

Eg:

#!/bin/bash

#test.sh

#listen water

tot=0

while [$# -gt  0]

do

tot=$(($tot+$1))

shift

done

 

shell函数

  在编写shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可成为函数,合理使用shell函数,可以使得脚本内容更加简介,增强程序的易读性,提高执行效率

 

定义新的函数

①--函数的定义如下:

 

[function] functionName()

 

action;

 

[return int;]

 

 

这里关于函数的定义中,关键字“function”可有可无,但是,一般地,建议写上

 

②--上述定义中,返回值也是可有可无,如果加的话,指定一个整数值n(0~255),如果不指定return语句,则以函数体中最后

 

一个语句的执行结果作为函数的返回值

 

③--return语句中,也可以使用临时的中间变量的,如“return $(($1+$2));”

 

④--承上,如果有“total=$(functionName3 2)”,并且打印“echo $total”,可以发现拿到的是空值,这是因为,一对括号中

 

中的那个函数调用,相当于一个命令,对于命令结果的获取,在shell中必须通过预置变量“$?”来获得。故而,上面的调用中,

 

可以在调用后紧接着使用“total=$?”来获取调用的结果

 

⑤--函数调用之前的变量是全局变量,在函数内部可以使用关键字local定义局部变量

 

⑥--函数名称可以与系统原有的命令名称一致,shell在解析时,会先在脚本中寻找,建议不要写成重名的

 

⑦--要想在函数中返回其他类型的结果时,可以设定一个全局变量,然后在函数中修改此变量,最后执行此函数时,就可以读出它了,

 

这是一种变通的返回值处理方法

 

⑧--函数在调用时的使用方式,类似于平常linux下面的命令处理方式,多个参数间用空格隔开,且函数名字后不要加括号

 

0 0
原创粉丝点击