二、shell编程+判断
1.前言
无论什么编程语言都离不开条件判断(流控)。shell也不例外。
例如,用户输入的密码不够长时提醒用户,密码过短
例如,用户输入了备份的目录,如果有目录继续备份,如果没有目录创建目录
例如,用户输入成绩,如果100-80分评委优秀,如果79-60分评为合格,如果59-0分评为不合格
2.数值比较
整数1 操作符 整数2
操作符
-gt 大于>
-lt 小于<
-eq 等于=
-ne 不等于≠
-ge 大于等于>=
-le 小于等于<=
案例
猜测用户输入的密码,是否满足长度需求
变量长度
echo ${#pass}

测试语法
格式1
test 条件表达式

格式2
[ 空格 条件表达式 空格 ]

格式3
[[ 条件表达式 ]]

if语法结构
if 如果
then 那么
else 否则
fi 结束


3.文件测试 (重要)
需求用户输入备份的路径,如果存在提示已存在可以备份,如果不存在提示目录不存在请创建。
-f 当filename存在时返回真
-b 当filename存在并是块文件时返回真
-d 当pathname存在并是一个目录时返回真
-h 当filename存在并是符号链接文件时返回真
-c 当filename存在并且是字符文件时返回真
-e 当由pathname指定的文件或目录存在时返回真
-g 当由pathname指定的文件火目录存在并且设置了SGID位时返回真
-k 当由pathname指定文件火目录存在并设置了“粘滞”位时返回真
-p 当filename存在并是命名管道时返回真
-r 当由pathnname指定的文件或目录存在并且可读时返回真
-s 当filename存在并且文件大小大于0时返回真
-S 当filename存在并且时socket时返回真
-t 当fd是与终端设备相关联的文件描述符时返回真
-w 当由pathname指定的文件或目录存在并且可写时返回真
-x 当由pathname指定的文件或目录存在并且可执行时返回真
-O 当由pathname存在并且被当前程序的有效用户id的用户拥有时返回真(大写字母O)
-G 当由pathname存在并且属于当前程序的有效用户id的用户的用户组时返回真
-d


-w

4.字符串比较
[ '"字符串" = "字符串" ]
= 等于
== 等于
!= 不等于


-z 判断字符串长度是0
-n 判断字符串长度不是0

5.and 和or
当条件测试比较复杂的时候,需要多个条件同时成立,就需要混合调节测试了。
逻辑的(and)和(or)
&& 逻辑的and的意思,-a 两个条件同时成立,为真
|| 逻辑的or的意思,-o 两个条件一个成立,为真
例子
猜测用户输入的密码是否满足如下条件:
1.长度大于等于7位
2.包含字母大写
3.包含字母小写
4.包含符号"@!_"
&&用法

这里是-ge 不是gt
||用法



6.流程控制if——单分支结构
语法
if [ 条件测试 ]
then
符合该条件执行的语句
fi
例子
编写脚本,由用户名,如果用户不存在,则创建用户,并设置密码为123456

7.流程控制if——双分支结构
if 条件测试
then
命令序列
else
命令序列
fi
8.流程控制if——多分支结构
if 条件测试
then
命令序列
elif
命令序列
elif
命令序列
....
else
命令序列
fi
例子
编写脚本,取出系统时间的小时,对数字进行判断
6-10 this is morning
11-13 this is noon
14-18 this is afternoon
其他 this is night
date 月 日 时 分
date 02071300



浙公网安备 33010602011771号