1-23-条件测试语句和if流程控制语句的使用

2018-06-17  本文已影响0人  秋的懵懂

时间:2018-06-16 姓名:魏文应


一、变量测试语句

test测试命令

使用test命令,可以进行变量的测试。如果结果是对的,也叫结果为真,用$?=0表示,反之为假,用$?=1表示。

参数 说明 示例
-e 文件名 文件是否存在,存在为真 test -e my_test.txt
-r 文件名 文件是否可读,可读为真 test -r my_test.txt
-w 文件名 文件是否可写,可写为真 test -w my_test.txt
-x 文件名 文件是否可执行,可执行为真 test -x my_test.txt
-s 文件名 文件是否有字符,有为真 test -s my_test.txt
-d 文件名 文件是否为目录,是为真 test -d my_test.txt
-f 文件名 文件是否为普通文件,是为真 test -f my_test.txt
-c 文件名 文件是否为字符型特殊文件,是为真 test -c my_test.txt
-b 文件名 文件是否为块特殊文件,是为真 test -b my_test.txt

注意:文件必须存在,不存在都为假,$?=1。 比如:

# 测试文件是否存在
test -e my_test.txt
# 打印测试结果
echo $?

数值大小比较

参数 说明
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

比如:

# 判断5和4是否相等
test  5 -eq 4
# 打印测试结果
echo $?

字符串比较

参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

比如:

str1=abc
str2=abcd

test $str1 = $str2
echo $?

test $str1 == $str2
echo $?

test $str1 != $str2
echo $?

test -z $str1
echo $?

test测试语句另一种常用的使用方法

我们使用 [ ] 中括号来表示test这个命令,比如 [ -d /etc ] 来判断 /etc 是否是一个目录,相当于 test -d /etc 这个命令。使用 [ ] 中括号,在数值比较时,我们可以使用正常的数学符号来比较数值大小,也可以使用 -eq、-ne、-gt 等字符。

字符表示 符号替代表示
-eq == 等于
-ne != 不等于
-gt > 大于
-lt < 小于

在使用 [ ] 替代test命令是,我们要注意一下几点:

我们需要了解以下特性:

逻辑与(&&)和逻辑或(||)

逻辑与(&&): 逻辑与,可以用 -a 表示(在[[ ]] 这中有双中括号的时候,不能用 -a 表示 &&)。比如:[ -f /etc/passwd ] && [ -w /etc/passwd ]

逻辑或(||): 可以用 -o 表示(在[[ ]] 这中有双中括号的时候,不能用 -o 表示 ||)。比如:[ -f /etc/passwd ] || [ -w /etc/passwd ]

在条件判断中,使用逻辑与,可以使用下面三种写法:

if [ 条件判断一 ] && [ 条件判断二 ]; then
    命令一
fi
if [[ 条件判断一 && 条件判断二 ]]; then
    命令一
fi
if [ 条件判断一 -a 条件判断二 ]; then
    命令一
fi

逻辑与和逻辑或,还有下面的用途,比如

[ 1 -lt 2 -a 5 > 3 ] && echo true || echo false

上面语句,如果[ 1 -lt 2 -a 5 > 3 ]为真时,执行echo true,如果为假时,执行echo false

二、流程控制--if语句

单分支if语句

语法格式:

if  条件1  ; then
    命令1
fi

比如:

#!/bin/bash

if [ $USER != root ]
then
        echo "error: not root user, permission demain."
        exit 127            # 给它一个退出码
fi

也可以将then和if放在同一行:

#!/bin/bash

if [ $USER != root ]; then
        echo "error: not root user, permission demain."
        exit 127            # 给它一个退出码
fi

双分支if语句

语法格式:

if  条件1  ; then
    命令1
else
    命令2
fi

比如,写一个ping测试IP的脚本,看一下是否能够ping通:

#!/bin/bash

# 在类Unix系统中,/dev/null,或称空设备,
# 是一个特殊的设备文件,它丢弃一切写入其
# 中的数据(但报告写入操作成功),读取它
# 则会立即得到一个EOF。

ping -c 3 -i 0.2 $1 > /dev/null

if [ $? -eq 0 ]; then
        echo "HOST $1 is up"
else
        echo "HOST $1 is down"
fi

多分支if语句

语法格式:

if  条件1  ; then
    命令1
elif  条件2  ; then
    命令2:
elif  条件3  ; then
    命令3
else
    命令n
fi

比如:

#!/bin/bash

m=man
w=woman

read -p "请输入你的性别:" sex

if [ $sex == $m ]; then
        echo "这是男人。"
elif [ $sex == $w ]; then
        echo "这是女人。"
else
        echo "输入错误。"
fi
上一篇 下一篇

猜你喜欢

热点阅读