现在的位置: 首页 > 综合 > 正文

【编】条件测试

2013年08月04日 ⁄ 综合 ⁄ 共 1632字 ⁄ 字号 评论关闭

测试命令

[ -d DIR ] 如果DIR存在并且是一个目录则为真
[ -f FILE ] 如果FILE存在且是一个普通文件则为真
[ -z STRING ] 如果STRING的长度为零则为真
[ -n STRING ] 如果STRING的长度非零则为真
[ STRING1 = STRING2 ] 如果两个字符串相同则为真
[ STRING1 != STRING2 ] 如果字符串不相同则为真
[ ARG1 OP ARG2 ] ARG1ARG2应该是整数或者取值为整数的变量,OP-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个

 

注意:左方括号[是一个命令的名字,传给命令的各参数之间应该用空格隔开

 

带与、或、非的测试命令

[ ! EXPR ] EXPR可以是上表中的任意一种测试条件,!表示逻辑反
[ EXPR1 -a EXPR2 ] EXPR1EXPR2可以是上表中的任意一种测试条件,-a表示逻辑与
[ EXPR1 -o EXPR2 ] EXPR1EXPR2可以是上表中的任意一种测试条件,-o表示逻辑或

 

 

if/then/elif/else/fi

范例1:

if [ -f ~/.bashrc ]; then
. ~/.bashrc

范例2:

 

#! /bin/sh

if [ -f /bin/bash ]
then echo "/bin/bash is a file"
else echo "/bin/bash is NOT a file"
fi
if :; then echo "always true"; fi

 

case/esac

范例1:

#! /bin/sh

echo "Is it morning? Please answer yes or no."
read YES_OR_NO
case "$YES_OR_NO" in
yes|y|Yes|YES)
echo "Good Morning!";;
[nN]*)
echo "Good Afternoon!";;
*)
echo "Sorry, $YES_OR_NO not recognized. Enter yes or no."
exit 1;;
esac
exit 0


范例2:

case $1 in
start)
...
;;
stop)
...
;;
reload | force-reload)
...
;;
restart)
...
*)
log_success_msg "Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}"
exit 1
;;
esac

 

for/do/done

范例1:

 

#! /bin/sh

for FRUIT in apple banana pear; do
echo "I like $FRUIT"
done

范例2:

#! /bin/sh

for FRUIT in apple banana pear; do
echo "I like $FRUIT"
done

说明:FRUIT是一个循环变量,第一次循环$FRUIT的取值是apple,第二次取值是banana,第三次取值是pear。再比如,要将当前目录下的chap0chap1chap2等文件名改为chap0~chap1~chap2~等(按惯例,末尾有~字符的文件名表示临时文件),这个命令可以这样写:

 

$ for FILENAME in chap?; do mv $FILENAME $FILENAME~; done

也可以这样写:

 

$ for FILENAME in `ls chap?`; do mv $FILENAME $FILENAME~; done

 

 

while/do/done

 

范例1:

 

#! /bin/sh
echo "Enter password:"
read TRY
while [ "$TRY" != "secret" ]; do
echo "Sorry, try again"
read TRY
done

 

范例2:

 

#! /bin/sh

COUNTER=1
while [ "$COUNTER" -lt 10 ]; do
echo "Here we go again"
COUNTER=$(($COUNTER+1))
done

 

 

 

抱歉!评论已关闭.