Linux-Shell脚本(五)

自己抄书用于记忆的,可能会加点自己写的东西

17.1 测试文件状态

Test命令用于测试字符串、文件状态和数字

test一般有两种格式

test condition
或
[ condition ]
#使用方括号时,要注意在条件两边加上空格
文件状态测试
-d目录
-f正规文件
-L符号连接
-r可读
-s文件长度大于0、非空
-w可写

-u

文件有suid位设置
-x可执行
#使用两种方法测试文件scores.txt是否可写并用最后退出状态测试是否成功。
#记住,0表示成功,其他为失败

#!/bin/bash

$ ls -l scores.txt
#1、
$ [ -w scores.txt ]
$ echo $?

#2、
$ test -w scores.txt
$ echo $?

#3、测试是否存在appsbin目录
$ [ -d appsbin ]
$ echo $?

#4、测试文件权限是否设置了suid位
$ [ -u xab ]
$ echo $?

17.2 逻辑操作符

测试文件状态是否为OK,但是有时要比较两个文件状态

shell提供三种逻辑操作完成此功能

        -a 逻辑与,操作符两边均为真,结果为真,否则为假

        -o 逻辑或,操作符两边一边为真,结果为真,否则为假

                ! 逻辑否,条件为假,结果为真

#下面的例子测试两个文件是否均为可读
$ [ -w results.txt -a -w scores.txt ]
$ echo $?

#测试其中一个是否可执行,使用逻辑或操作
$ [ -x results.txt -o -x scores.txt ]
$ echo $?

#要测试文件results.txt是否可写、可执行
$ [ -w results.txt -a -x results.txt ]
$ echo $?

17.3 字符串测试

字符串测试有5种格式
test "string"
test string_operator "string"
test "string" string_operator "string"
[ string_operator string ]
[ string string_operator string ]

这里string_operator可为
= 两个字符串相等
!= 两个字符串不等
-z 空串
-n 非空串

#1、测试环境变量EDITOR是否为空
$ [ -z $EDITOR ]
$ echo $?

#2、非空,取值是否是vi
$ [ $EDITOR = "vi" ]
$ echo $?

#3、用echo命令反馈其值
$ echo $EDITOR

#4、测试变量tape和tape2是否相等
$ TAPE="/dev/rmt0"
$ TAPE2="/dev/rmt1"
$ [ "$TAPE" = "$TAPE2"]
$ echo $?
#没有规定在设置变量时一定要用双引号,但在进行字符串比较时必须这样做

17.4 测试数值

测试数值可以使用许多操作符

"number" numeric_operator "number"
或
[ "number" numeric_operator "number" ]

numeric_operator可为
-eq 数值相等 (equal)
-ne 数值不相等 (not equal)
-gt 第一个数大于第二个数 (greater than)
-lt 第一个数小于第二个数 (less than)
-le 第一个数小于等于第二个数 (less than or equal)
-ge 第一个数大于等于第二个数 (greater than or equal)

#测试两个数是否相等
$ NUMBER=130
$ [ "$NUMBER" -eq "130"]
$ echo $?

$ [ "$NUMBER" -eq "100"]
$ echo $?

$ [ "$NUMBER" -gt "100"]
$ echo $?

#也可以测试两个整数变量
$ SOURCE_COUNT=13
$ DEST_COUNT=15
$ [ "SOURCE_COUNT" -gt "DEST_COUNT" ]
$ echo $?

#可以不必将整数值放入变量,直接用数字比较即可,但要加引号
$ [ "990" -gt "995" ]
$ echo $?

#可以用逻辑操作符将两个测试表达式结合起来
#仅需要用到一对方括号,而不能用两个
$ [ "990" -le "995" -a "123" -gt "33"]
$ echo $?

17.5 expr用法

#expr命令一般用于整数值,但也可用于字符串
expr argument operator argument
#expr也是一个手工命令行技术器

$ expr 10 + 10

$ expr 900 + 600

$ expr 30 / 3

$ expr 30 / 3 / 2

#使用乘号时,必须用反斜线屏蔽其特定含义,因为shell可能会误解显示星号的意义
$expr 30 \* 3

17.5.1 增量计数

#expr在循环中用于增量计算
#循环初始化为0,然后循环值加1,反引号的用法意即替代命令
#最基本的一种是从(expr)命令接受输出并将之放入循环变量
$ LOOP=0
$ LOOP='expr $LOOP + 1'

17.5.2 数值测试

#可以用expr测试一个数。如果试图计算非整数,将返回错误
$ expr rr+1
expr: non-numeric argument

#这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值
$ VALUE=12
$ expr $VALUE + 10 > /dev/null 2>&1
$ echo $?

#expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成功返回1,任何其他值为无效或错误
#下面的例子测试两个字符是否相等
$ VALUE=hello
$ expr $VALUE = "hello"
1
$ echo $?
0
#expr成功返回1。

17.5.3 模式匹配

#expr也有模式匹配功能
#可以使用expr通过指定冒号选项计算字符串中字符数
#.*意即任何字符重复0次或多次

$ VALUE=accounts.doc
$ expr $VALUE : October 8, '.*'
#在expr中可以使用字符串匹配操作,这里使用模式.doc抽取文件附属名

$ expr $VALUE : '\(.*\).doc'
accounts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值