一.本章结构
Shell脚本应用(二)
条件测试操作 包括文件测试,整数值比较,字符串比较,逻辑测试,
使用if条件语句 包括if语句的结构,if语句应用示例
二.实验过程
1.文件测试
格式:[ 操作符 文件或目录 ]
[root@localhost ~]# [ -d /etc/ssh ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /etc/hosts ] 返回0表示条件成立
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e /dev/cdrom ] && echo "YES" 返回已表示条件不成立
YES
[root@localhost ~]# [ -e /dev/usb ] && echo "YES" 逻辑与, "而且"的意思
2.整数值比较
格式:[ 整数1 操作符 整数2 ]
[root@localhost ~]# who | wc -l
7
[root@localhost ~]# [ $(who | wc -l) -gt 1 ] && echo "Too many." 用户数是否 > 1
Too many.
[root@localhost ~]# [ $(who | wc -l) -ge 2 ] && echo "> = 2." 用户数是否 >=2
[root@localhost ~]# FreeCC=$(free -m | grep "Mem" | awk '{print $4}')
[root@localhost ~]# [ $FreeCC -lt 1024 ] && echo ${FreeCC}MB 空闲内存是否 <1024mb
(864MB)
3.字符串比较
[ 字符串1 != 字符串2 ]
[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"
覆盖
[root@localhost ~]# echo $LANG 测试读入的字符串是否为yes
zh_CN.UTF-8
[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US" 测试读入的字符串是否为yes
Not en.US
4.逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...
[root@localhost ~]# echo $USER
root
[root@localhost ~]# [ $USER != "teacher" ] && echo "Not teacher" 测试当前用户名称
Not teacher
5.if语句的结构 (单分支结构,双分支结构,多分支结构)
单分支结构:
语法:if条件测试操作
then 命令序列
fi
if磁盘已用空间>80%
then
fi
if条件测试操作:
条件成立 then —— 命令序列 ——fi 结束判断
条件不成立 —— fi结束判断
双分支结构:
语法:if条件测试操作
if 条件测试操作
then 命令序列1
else 命令序列2
fi
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi
if条件测试操作:
条件成立 then —— 命令序列 1 —— fi 结束判断
条件不成立else —— 命令序列 2—— fi结束判断
多分支结构:
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
esle
判为不合格
fi
if条件测试操作1 —— 命令序列1 —— fi 结束判断
elif 条件测试操作2 —— then 命令序列2 —— fi 结束判断
elif条件测试操作2 —— else ——命令序列n ——fi结束判断
(1)单分支if语句
判断挂载点目录,若不存在则自动创建
[root@localhost ~]# vi chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR 当目录不存在时执行
fi
[root@localhost ~]# ls -ld /media/cdrom/
ls: /media/cdrom/: 没有那个文件或目录
[root@localhost ~]# sh chkmountdir.sh
[root@localhost ~]# ls -ld /media/cdrom/
drwxr-xr-x 2 root root 4096 05-05 07:18 /media/cdrom/
(2)双分支if语句
[root@localhost ~]# vi pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is up."
else
echo "Host $1 is down." 判断ping命令的检测结果分别给出不同提示
fi
[root@localhost ~]# sh pinghost.sh www.lzzy.net
Host 192.168.4.11 is up.
[root@localhost ~]# sh pinghost.sh www.aaa.com
Host 192.168.4.13 is down.
[root@localhost ~]# vi gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE 分!优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then 判断分数所在区间,给出不同的分档结果
echo "$GRADE 分,合格"
else
echo "$GRADE 分?不合格"
fi
[root@localhost ~]# sh gradediv.sh
请输入您的分数(0-100):89
89 分!优秀
以上就是我对 第二章Shell脚本应用 (二)这部分的一些实验和实验结果!
三.总结
shell脚本的实现:
脚本的实现,需要经过一个痛苦的过程,有时候一个看似很简单的shell功能脚本,也许会花费你很大的心思。最好的办法就是做切片,分段调试,分段测试,整体组合。精简代码。调整思路,完善脚本。不要试图一次性编写一个复杂的脚本。除非你对shell和系统服务如火纯青。最后,我初步了解了shell脚本的编写方法,自己对操作系统,和各种功能的实现方法和shell脚本的实现方式,方法还要认真学习和总结。以上是我的一点小小的心得和体会。
打 二章 Shell脚本应用(二)
以上本以上应用(eqeqe二)Shell脚本应用(二)第二章 Shell脚本