福清市建设局监督站网站,dede网站seo,永久免费asp空间,filezilla wordpressshell编程之条件语句 一、条件测试操作1.test命令2.文件测试3.利用条件判断#xff0c;创建文件4.整数值比较4.1 常用的测试操作符 5.字符串比较5.1 常用的测试操作符 6.逻辑测试6.1 常用的测试操作符 二、if语句的结构1.单分支结构2.双分支结构3.多分支结构4.if嵌套 三、case… shell编程之条件语句 一、条件测试操作1.test命令2.文件测试3.利用条件判断创建文件4.整数值比较4.1 常用的测试操作符 5.字符串比较5.1 常用的测试操作符 6.逻辑测试6.1 常用的测试操作符 二、if语句的结构1.单分支结构2.双分支结构3.多分支结构4.if嵌套 三、case语句结构1.case多分支结构 前言 在shell脚本程序中各条语句将按先后顺序依次执行从而实现批量处理的自动化过程。通过正确使用if语句进行条件测试操作使Shell脚本具有一定的“判断”能力以根据不同的条件来完成不同的管理任务。从而减轻了管理员本身的负担提升工作效率。 一、条件测试操作
1.test命令
测试表达式是否成立若成立返回0否则返回其他数值格式
格式一test 条件表达式
格式二[ 条件表达式 ] //中括号和表达式中间至少应有一个空格2.文件测试
要使 Shell脚本程序具备一定的智能面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如当磁盘使用率超过95%时发送告警信息;当备份目录不存在时能够自动创建;当源码编译程序时若配置失败则不再继续安装等shell环境根据命令执行后的返回状态值 $? 来判断是否执行成功当返回值为 0 时表示成功否则非0值表示失败或异常。使用专门的测试工具——test 命令可以对特定条件进行测试并根据返回值来判断条件是否成立返回值为0表示条件成立。 语法格式 [ 操作符 文件或目录 ]常用的测试操作符
-d测试是否为目录Directory) -e测试目录或文件是否存在(Exist) -f测试是否为文件(File) -r测试当前用户是否有权限读取(Read) -w测试当前用户是否有权限写入(Write) -x测试当前用户是否有权限执行(eXcute) -b测试是否为设备文件 -c测试是否为字符设备文件 -s测试存在且文件大小为空 -L测试是否为链接文件
执行条件测试操作以后通过预定义变量 $ ? 可以获得测试命令的返回状态值
从而判断该条件是否成立。例如执行以下操作可测试目录/media/是否存在如果返回值 $? 为 0表示存在此目录否则表示不存在或者虽然存在但不是目录
[rootc7-1 home]# test -d /etc/sysconfig/ echo 是目录 //如果前面的命令成功了 则运行后面的命令返回结果 是目录是而且的意思
是目录
[rootc7-1 home]# echo $?
0
#存在此目录[rootc7-1 home]# [ -d /home/dashiji/ ]
[rootc7-1 home]# echo $?
1
#目录不存在[rootc7-1 home]# useradd dashiji
[rootc7-1 home]# [ -d /home/dashiji/ ] echo YES
YES
[rootc7-1 home]# echo $?
0
3.利用条件判断创建文件
[rootc7-1 home]# ls /opt //查看opt下没有dashiji文件
rh
[rootc7-1 home]# [ ! -e /opt/dashiji ] mkdir /opt/dashiji
#感叹号取反 -e 测试目录或文件是否存在 若不存在 则创建[rootc7-1 home]# echo $?
0
[rootc7-1 home]# ls /opt/
dashiji rh
#再次查看opt下已经有了dashiji4.整数值比较
格式
[ 整数1 操作符 整数2 ]整数值比较指的是根据给定的两个整数值判断第一个数与第二个数的关系如是否大于、等
于、小于第二个数。整数值比较的常用操作选项如下使用时将操作选项放在要比较的两个整
数之间。4.1 常用的测试操作符
-eq第一个数等于Equal)第二个数。 -ne第一个数不等于Not Equal第二个数。 -gt第一个数大于( Greater Than)第二个数。 -lt第一个数小于(Lesser Than)第二个数。 -le第一个数小于或等于(Lesser or Equal)第二个数。 -ge第一个数大于或等于(Greater or Equal)第二个数
例
[rootc7-1 home]# who | wc -l //统计几个远程终端
3
[rootc7-1 home]# [ $(who | wc -l ) -le 5 ] echo 用户太少
用户太少
#判断远程终端是否小于等于五若小于等于则再运行后面的命令echo 用户太少[rootc7-1 home]# [ $(who | wc -l ) -ge 2 ] echo 用户太多
用户太多[rootc7-1 home]# Freec$(free -m | grep Mem: | awk {print $6})
#定义变量Freec检索Men并打印其中第六列
[rootc7-1 home]# [ $Freec -lt 1024 ] echo ${Freec}MB
416MB
#判断Freec是否小于1024若小于则运行 echo ${Freec}MB
5.字符串比较
格式一
[ 字符串1 字符串2 ]
[ 字符串1 ! 字符串2 ]格式二
[ -z 字符串 ]5.1 常用的测试操作符 字符串内容相同第一个字符串与第二个字符串相同。 第一个字符串与第二个字符串不相同号表示相反的意思 -z 检查字符串是否为空(Zero对于未定义或赋予空值的变量将视为空串。
例
[rootc7-1 ~]# echo $LANG
zh_CN.UTF-8
[rootc7-1 ~]# [ $LANG ! en.US ] echo not en.US
not en.US
#测试语言环境判断是否为英文LANG等不等于en.US若不等于执行后面的命令 not en.US[rootc7-1 ~]# read -p yes/no: ACK
yes/no: ^C
[rootc7-1 ~]# [ -z $ACK ] echo 你的变量是空字符
你的变量是空字符
6.逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时
根据这些条件是否同时成立或者只要有其中一个成立等情况需要有一个测试的过程格式1
[ 表达式1 ] 操作符 [ 表达式2 ]格式2
命令1 操作符 命令26.1 常用的测试操作符
-a 或 逻辑与“而且”的意思只有当前后两个条件都成立时整个测试命令的返回值﹐才
为0结果成立)。使用test命令测试时 可改为 -a
-o 或 || 逻辑或“或者”的意思只要前后两个条件中有一个成立整个测试命令的返回值即
为0结果成立)。使用test命令测试时 || 可改为 -o逻辑否表示不只有当指定的条件不成立时整个测试命令的返回值才为0结果
成立。例
[rootc7-1 ~]# [ -d /etc ] [ -r /etc ] echo you can open it
you can open it
#只有前后两个条件都成立才能返回0[rootc7-1 ~]# [ -d /etc/ ] || [ -d /opt/ ] echo ok
ok
#有一个条件成立即可[rootc7-1 ~]# Munm$(uname -r | awk -F. {print $1})
[rootc7-1 ~]# echo $Munm
3
[rootc7-1 ~]# Snum$(uname -r | awk -F. {print $2})
[rootc7-1 ~]# echo $Snum
10
[rootc7-1 ~]# [ $Munm -ge 3 ] [ $Snum -ge 6 ] echo true
true
#查看当前Linux系统的内核版本是否大于3.4
二、if语句的结构
1.单分支结构
格式if 条件测试操作then 命令序列fi例
[rootc7-1 ~]# vim test1.sh#!/bin/bash //固定格式
if ls /opt /dev/dull //if条件测试判断查看是否有opt目录并把输出信息给黑洞
then //条件成立echo it is ok //则echo一个it is ok
fi //fi 结束判断[rootc7-1 ~]# chmod x test1.sh //给权限
[rootc7-1 ~]# ./test1.sh //执行
it is ok
[rootc7-1 ~]# vim test2.sh#!/bin/bash
MOUNT_DIR/mnt/centos7 //定义变量
if [ ! -e $MOUNT_DIR ] //if判断 是否/mnt/centos7 不存在
then //条件成立mkdir /mnt/centos7 //创建 /mnt/centos7 echo $MOUNT_DIR 并不存在现已创建 //输出返回值
fi //fi 结束判断[rootc7-1 ~]# chmod x test2.sh //给与权限
[rootc7-1 ~]# ./test2.sh //执行
/mnt/centos7 并不存在现已创建
[rootc7-1 ~]# ls /mnt
centos7
[rootc7-1 ~]# vim test3.sh#!/bin/bash
read -p 请输入文件名 fileif [[ $file *.sh ]]
thenecho 这是一个shell脚本
fi[rootc7-1 ~]# ./test3.sh
请输入文件名test1.sh
这是一个shell脚本
2.双分支结构
格式if 条件测试操作then 命令序列1else 命令序列2fi例
[rootc7-1 ~]# vim test4.sh#!/bin/bashIP192.168.3.101 //定义变量ping -c 2 -i 0.2 -W 3 $IP /dev/null //ping2次输出给黑洞if [ $? -eq 0 ];then //判断$?是否等于0echo $IP is up //条件成立输出 IP is up
else //条件不成立echo $IP is down //输出 IP is down
fi[rootc7-1 ~]# ./test4.sh
192.168.3.101 is up
[rootc7-1 ~]# ./test4.sh
192.168.3.101 is down
[rootc7-1 ~]# vim test5.sh#!/bin/bash
if [ $UID -eq 0 ];thenecho 当前登陆用户是管理员root
elseecho 当前登陆用户不是管理员root
fi
[rootc7-1 ~]# sh test5.sh
当前登陆用户是管理员root[rootc7-1 ~]# cp test5.sh /home/zhangsan/
[rootc7-1 ~]# cd /home/zhangsan/
[rootc7-1 zhangsan]# chmod x test5.sh
[rootc7-1 zhangsan]# su zhangsan
[zhangsanc7-1 ~]$ ./test5.sh
当前登陆用户不是管理员root
3.多分支结构
#格式if 条件测试操作1then 命令序列1elif 条件测试操作2then 命令序列2else命令序列3fi例
[rootc7-1 zhangsan]# vim test6.sh#!/bin/bash
read -p 请输入您的分数(0-100) GRADEif [ $GRADE -ge 85 ] [ $GRADE -le 100 ] //判断$GRADE 是否大于85小于100
thenecho $GRADE 分优秀 //条件满足则输出,不满足则继续往下进行判断elif [ $GRADE -ge 60 ] [ $GRADE -le 84 ] //判断是否大于60小于84
then echo $GRADE 分合格 elif [ $GRADE -ge 100 ]
thenecho 请输入分数为0~100
else //以上条件都不成立echo $GRADE 分不合格
fi
4.if嵌套
[rootc7-1 ~]# vim httpd.sh#!/bin/bash
pgrep -l httpd //查找httpd进程
if [ $? -ne 0 ] //判断是否在运行
then //条件成立则if [ $(rpm -q httpd)未安装软件包 httpd ] //判断httpd是否安装then //条件成立yum install -y httpd //没安装则安装systemctl start httpd //启动服务echo httpd服务已安装启动 //输出已启动else //若以上条件不成立systemctl start httpd //启动httpdecho httpd服务已启动 //输出服务已启动fi //结束判断
else //若以上条件都不成立 echo httpd is running //则输出running
fi //结束判断
[rootc7-1 ~]# vim user.sh#!/bin/bash
read -p 请输入用户名 user //定义交互式变量
if grep $user /etc/passwd /dev/dull //条件测试判断是否有这个用户并输入给黑洞
then //条件成立 则if [ -d /home/$user ] //判断用户是否有家目录then //若条件成立echo 该用户状态正常 //输出状态正常else //若以上条件都不成立read -p 该用户没有家目录是否删除该用户请输入[yes/no]: ask //定义交互式变量if [ $ask yes ] //判断输入的是不是yesthen //若条件成立echo 正在删除用户。。。 //输出userdel $user /dev/null;sleep 2 //删除该用户并延迟两秒echo 该用户已删除 //输出elif [ $ask no ] //条件测试2判断输入的是不是nothen //若条件成立exit //退出fi //结束判断fi //结束判断else //若以上条件都不成立echo 该用户不存在 //输出一个该用户不存在
fi //结束判断
三、case语句结构
1.case多分支结构
格式
case 变量值 in
模式1命令序列1;;
模式2命令序列2;;………*)默认命令序列
esac
例
[rootc7-1 ~]# vim test7.sh#!/bin/bash
case $1 in
start)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux | grep httpd
echo httpd start
;;stop)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux | grep httpd
echo httpd stop
;;restart)
echo httpd stop......
/usr/bin/ps aux | grep httpd
/usr/bin/systemctl $1 httpd
echo httpd restart......
/usr/bin/ps aux |grep httpd
;;status)
/usr/bin/systemctl $1 httpd
;;
*)
echo plases inpunt start|stop|restart|status
esac