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