找回密码
 注册
搜索

12. 条件测试

已有 84 次阅读2014-2-1 19:08 |个人分类:SHELL编程| 条件测试, shell编程

1.  if 判断的依据   

if 语句本身并不执行任何判断,它实际上接受一个程序名作为参数,然后执行这个程序,并依据这个程序的返回值来判断是否执行相应的语句。如果程序的返回值是0,就表示“真”,if语句进入对应的语句模块;所有非0的返回值都表示假,if语句跳过对应的语句块。

#! /bin/bash 

if ./testscript -1          ##如果返回值是-1
then
    echo “testscript exit-1”
fi 
 

if ./testscript 0           ##如果返回值是0
then
    echo “testscript exit 0”
fi 
 

if ./testscript 1           ##如果返回值是1
then
    echo “testscript exit 1”
fi 

脚本的运行结果如下:
$ ./testif
testscript exit 0 

这段脚本依次测试返回值-101,最后只有返回值为0所对应的echo语句被执行。脚本中调用的testscript接受用户输入的参数,然后加单的把这个参数返回给其父进程。Testscript脚本只用两行代码,其中exit语句用于退出脚本并返回一个值。
 
#! /bin/bash
Exit $@

2.   test命令和 [    

test命令和[命令可以对3类表达式进行测试,字符串比较、文件测试和数字比较。

(1)字符串比较

下面这段脚本用于判断用户的输入是否为空。如果用户什么都没有输入,就显示一条要求输入口令的信息。 

#! /bin/bash
read password 

if [ -z “password” ]
then
    echo “Please enter thepassword”
fi 

(2)文件测试

文件测试用于判断一个文件是否满足特定的条件。下面这个例子取自系统中的rc脚本,如果/sbin/unconfigured.sh文件存在并且可执行,就执行这个脚本,否则什么都不做。 

if [  -x/sbin/unconfigure.sh ]
then
    /sbin/unconfigured.sh
fi 

3)数字比较

test[命令在数字比较方面只能用来比较整数(包括负整数和正整数)。下面这段代码取自Samba服务器的启动脚本。脚本使用-eq选项测试变量status是否等于0.如果是,就调用log_success_msg显示Samba已经运行的信息;否则就调用log_failure_msg显示Sambam没有运行。
if [ $status –eq 0 ]
then
    Log_success_msg “SMBDis running”
else
    Log_failure_msg “SMBDis not running”
fi 

4)复合表达式

下面这个脚本接受用户输入,如果用户提供的文件存在,并且vi编辑器存在,就先复制这个文件,然后调用vi编辑器打开;如果用户文件不存在,或者没有vi编辑器,就什么都不作。 

#! /bin/ bash 

if [ -f $@  -a –x /usr/bin/vi]
then
    cp $@ $@.bak
    vi $@
 
fi 

具体来说,该if语句依照下面的步骤执行。

l  首先执行“-f $@”测试命令,如果“$@” 变量(也就是用户输入的参数对应的文件存在,那么该测试返回真(0); 否则整条测试语句返回假,直接跳出if语句块。

l  如果第一个条件为真,就执行“-x /usr/bin/vi”测试命令,如果/usr/bin/vi可执行,那么该测试返回值(0,同时整条测试语句返回真(0);否则整条测试语句返回假,直接跳出if语句块。

l  如果整条测试语句返回真,那么就执行if语句块的两条语句。 

下面这段脚本在变量password非空,或者密码文件private_key存在的情况下向父进程返回0;否则提示用户输入口令.

if [ ! –z password” –o –f ~/.public_key]
then
    exit 0
else
    echo “please enter thepassword:”
    read passwd
fi 

if语句依照下面的步骤执行。

l  首先执行 ! “-z “$password””测试命令,如果该字符串password不为空,那么该测试语句返回真(0),同时整条测试语句返回真(0),不再判断“-f ~/.public_key.

l  如果第一个条件为假,就执行“-f ~/.public_key”命令。如果主目录下的.punlic_key文件存在,那么该测试返回真(0),同时整条测试语句返回真;否则整条语句返回假,直接跳出if语句块。

l  如果整条测试语句返回真,那么就执行“exit 0”;否则就执行else语句块中的语句。



路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 11:55 , Processed in 0.030269 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部