shell条件测试操作 if分支 for循环 while 循环
目录
条件测试操作
条件测试的基本用法:
字符串条件测试:
逻辑组合
数字的条件测试:
编写一个脚本:
对文件进行测试:
if判断语句
单分支
双分支
多分支
编写一个脚本:
编写一个脚本:
for循环
while循环:可以无限循环
条件测试操作
条件测试的基本用法:
- "test 表达式"或者[ 表达式 ]都可以,表达式两边至少要留出一个空格
[root@server0 opt]# test a == a #判断字符串a是否等于a
[root@server0 opt]# echo $? #查看结果,0为判断成功,非0为失败
0
[root@server0 opt]# test a == b
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ a == a ] #另一种格式,效果同上,字符串两边要有空格!!!
[root@server0 opt]# echo $?
0
[root@server0 opt]# [ a == b ]
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ $USER == root ] #判断当前登录用户是否为root
[root@server0 opt]# echo $?
0
字符串条件测试:
- == 比较两个字符串是否相同
- != 比较两个字符串是否不相同
- -z 检查变量的值是否为空值
- ! -z检查变量的值是否为非空值
- -n 检查变量的值是否为非空值(等同于! -z)
[root@server0 opt]# [ a != b ] #判断a是否不能于b
[root@server0 opt]# echo $?[root@server0 opt]# [ -z $a ] #判断变量a是否为空值
[root@server0 opt]# echo $? #如果为空值则输出为0
1
[root@server0 opt]# [ $a == b ] #判断变量a是否等于b,如果变量a为空会报错
[root@server0 opt]# [ "$a" == b ]#解决上上述问题
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ ! -z $a ] #判断变量a是否非空
[root@server0 opt]# echo $?
0
-eq与==都有判断是否相等的意思,区别是"=="主要用于 判断字符串两边是否相等,而-eq主要用于判断数字
[root@server0 opt]# [ 0123 == 123 ]
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ 0123 -eq 123 ]
[root@server0 opt]# echo $?
0
逻辑组合
逻辑与: && 之前命令成功才会执行之后的命令
逻辑或: || 之前命令失败才会执行之后的命令
&& 前后任务都成功才算成功
|| 前后有一个任务成功就算成功
[root@server0 opt]# vim test01.sh
#!/bin/bash
read -p "请输入一个用户名" a
[ -z $a ] && echo "给我名字!" && exit #如果没有输入用户名输出"给我名字!"然后直接退出
useradd $a
stty -echo
read -p "请输入密码" p
stty echo
echo $p | passwd --stdin $a
[root@server0 opt]# bash test01.sh
请输入一个用户名
给我名字!
[root@server0 opt]# ls && ls && ls #三次都执行成功
rh test01.sh
rh test01.sh
rh test01.sh
[root@server0 opt]# ls || ls || ls #只有第一个条件成功
rh test01.sh
[root@server0 opt]# ls || ls && ls #第一个条件和第三个条件执行成功
rh test01.sh
rh test01.sh
[root@server0 opt]# ls && ls || ls #第一个条件和第二个条件执行成功
rh test01.sh
rh test01.sh
数字的条件测试:
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
[root@server0 opt]# [ 10 -gt 10 ] || echo "ok"&& echo "no"
ok
no #两次执行均成功,显示OK和no
[root@server0 opt]# [ 10 -gt 10 ] && echo "ok"|| echo "no"
no #前次执行不成功
编写一个脚本:
每隔两分钟检查主机的登录账户数量,如果超过3人,则发邮件给管理员报警
[root@server0 opt]# vim test02.sh
#!/bin/bash
a=$(who | wc -l) #统计有几个人登录该账户
[ $a -gt 3 ] && echo "有人入侵!!!" | mail -s test root
[root@server0 opt]# bash test02.sh可以多开几个终端试一下[root@server0 opt]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Jan 3 11:39 18/595 "test"
& 1
Status: R有人入侵!!!Held 1 message in /var/spool/mail/root
[root@server0 opt]# crontab -e
*/2 * * * * /opt/test02.sh #每隔两分钟执行该脚本
[root@server0 opt]# chmod +x test02.sh #一定要给脚本加权限!!!!![root@server0 opt]# rm -rf /var/spool/mail/root #可以先删除所有邮件,该路径为专门存放root用户邮件
[root@server0 opt]# mail #查看邮件
对文件进行测试:
-e | 判断对象是否存在(不管是文件还是目录),存在则结果为真 |
-d | 判断对象是否为目录,是则为真 |
-f | 判断对象是否为一般文件,是则为真 |
-r | 判断当前用户对文件是否有读权限 |
-w | 判断当前用户对文件是否有写权限 |
-x | 判断当前用户对文件是否有执行权限 |
[root@server0 opt]# [ -e /opt/123 ] #测试123是否存在,不关心文件类型
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ -f /opt/123 ] #测试123文件是否存在,必须是普通文件
[root@server0 opt]# echo $?
1
[root@server0 opt]# mkdir abc
[root@server0 opt]# [ -f /opt/abc ] #测试abc是否存在,必须是普通文件
[root@server0 opt]# echo $?
1
[root@server0 opt]# [ -d /opt/abc ] #测试abc是否存在,必须是目录
[root@server0 opt]# echo $?
0
[root@server0 opt]# [ -r /opt/abc ] #当前用户对abc是否能读
[root@server0 opt]# echo $?
0
[root@server0 opt]# [ -w /opt/abc ] #当前用户对abc是否能写
[root@server0 opt]# echo $?
0
[root@server0 opt]# [ -x /opt/abc ] #当前用户对abc是否能执行
[root@server0 opt]# echo $?
0#建议写绝对路径!
即使文件没有任何权限,用管理员身份测试rwx权限,rw依旧为0,x为非0
if判断语句
单分支
if 条件测试;then
执行指令1
执行指令2
.......
fi
双分支
if 条件测试;then
执行指令1
else
执行指令2
fi
多分支
if 条件测试1;then
执行指令1
elif 条件测试2;then
执行指令2
else
执行指令n
fi
if双分支:
[root@server0 opt]# vim test03.sh
#!/bin/bash
if [ $USER == root ];thenecho "ok"
elseecho "no"
fi[root@server0 opt]# bash test03.sh
ok
[root@server0 opt]# su - student[student@server0 ~]$ cd /opt[student@server0 opt]$ bash test03.sh
no
if多分支:
[root@server0 opt]# vim test04.sh
#!/bin/bash
read -p "请输入数字" n
if [ $n -gt 90 ];thenecho "优秀"
elif [ $n -gt 70 ];thenecho "良好"
elif [ $n -gt 60 ];thenecho "及格"
elseecho "回炉"
fi
[root@server0 opt]# bash test04.sh
请输入数字
编写一个脚本:
对某一个IP进行ping操作,可以使用变量(read 或 位置变量$1),方便多次使用脚本
ping命令: ping -c 数字 指定ping的次数
ping -i 数字 指定ping的间隔时间,默认ping的间隔时间为1秒钟
ping -W 数字 指定ping的时候不通反馈时间(秒),提高效率
[root@server0 opt]# vim test05.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 1 172.25.0.12 &> /dev/null
if [ $? -eq 0 ];thenecho "通了"
elseecho "不通"
fi
[root@server0 opt]# bash test05.sh
不通
编写一个脚本:
猜数游戏,计算机出一个随机的数字,你出一个数字,比计算机大则输出猜大了,比计算机小则输出猜小了,一样则输出恭喜你猜中了!
[root@server0 opt]# vim test06.sh
#!/bin/bash
for i in {1..20}
do
x=$[$RANDOM%10]
read -p "请输入一个数字(0-9)" n
if [ $x -eq $n ];thenecho "恭喜,猜对了!"&& exit
elif [ $n -lt $x ];thenecho "猜小了,想知道正确答案吗,求我呀!"
elseecho "猜大了,垃圾!"
fi
done
for循环
for 变量名称 in 值1 值2 值 3....
do
指令
done
[root@server0 opt]# vim test07.sh
#!/bin/bash
a=0
b=0
for i in `seq 15` #也可以写成{1..15}
doping -c 3 -i 0.1 -W 1 172.25.0.$i &> /dev/null
if [ $? -eq 0 ];thenecho "172.25.0.$i通了"let a++
elseecho "172.25.0.$i不通"let b++
fi
done
[root@server0 opt]# bash test07.sh
172.25.0.1不通
172.25.0.2不通
172.25.0.3不通
172.25.0.4不通
172.25.0.5不通
172.25.0.6不通
172.25.0.7不通
172.25.0.8不通
172.25.0.9不通
172.25.0.10通了
172.25.0.11通了
172.25.0.12不通
172.25.0.13不通
172.25.0.14不通
172.25.0.15不通
2台通了,13台不通
while循环:可以无限循环
while 条件测试
do
执行指令
done
[root@server0 opt]# vim test08.sh
#!/bin/bash
while : #冒号代表无限循环
doecho 123sleep 0.1
done
shell条件测试操作 if分支 for循环 while 循环相关推荐
- shell条件测试操作
步骤一:条件测试的基本用法 1)语法格式 使用"test 表达式"或者[ 表达式 ]都可以,表达式两边至少要留一个空格. 条件测试操作本身不显示出任何信息.测试的条件是否成立主要体 ...
- 测试过程中用shell的地方_Shell脚本应用——条件测试操作
Shell脚本应用--条件测试操作 前言:在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,这就使得脚本过于机械化,不够"智能",难以处理更加 ...
- Win32高级语法 条件测试语句与分支语句
.if 表达式1 .elseif 表达式2 .else 所以表达式为否 .endf ;if语句结束 下面两段程序分别使用汇编语法与高级语法对程序进行条件测试和分支, 弹出对话框当点击"是&q ...
- Shell脚本基础 、 使用变量 、 条件测试及选择 、 列表式循环案例
Shell脚本基础 . 使用变量 . 条件测试及选择 . 列表式循环案例 1 案例1:Shell脚本的编写及测试 1.1 问题 1.2 方案 1.3 步骤 2 案例2:重定向输出的应用 2.1 问题 ...
- shell条件语句及循环语句
if 语句的结构 在 Shell 脚本应用中,if 语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果--那么--).根据不同的复杂程度,if 语句的选择结构可以分 ...
- 【Linux】shell脚本实战-if多分支条件语句详解
文章目录 前言 多分支语句的语法 多分支语句举例: 1. 出嫁的条件 2. 管理http服务实战脚本 3. 猜数字游戏v1版本-if版本 总结 前言 前面我们已经学习过单分支语句和双分支语句的使用. ...
- shell之case和循环语句(case语句的格式与举例)(for循环,while循环until循环语句的详解和continue,break解释, 九九乘法口诀表 ,等腰三角形)
文章目录 shell编程之case语句与循环语句(for,while) case多分支语句 case语句的实例 使用for循环语句 for语句实例 用循环语句输出1-10的数字的五种办法 计算偶数/奇 ...
- 网络安全零基础学习视频:条件测试语句和if流程控制语句的使用
全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容: 20.1 read命令键盘读取变量的值 20.2 流程控制语句if 20.3 te ...
- 数值运算 条件测试 、 if选择结构
" "双引 引整体 "a b c" != a b c abc == "abc" 以后最好加"",防止出现错误 '' 单引 ...
最新文章
- c2c网站开店的流程图_shopee开店入驻?Shopee选品为什么这么重要
- vs2010MFC D3D播放YUV格式视频详细制作全过程
- 使计算机工作必不可缺的软件,探讨测绘工程中计算机制图的运用问题(原稿)
- WPF显示富文本emoji表情+文本(类似微信)
- bytevalue_Java Number byteValue()方法与示例
- 前端学习(2363):发送get请求
- Python基于值的内存管理真相
- 北京市强化电信用户信息安全保护
- angular五大服务顺序_IATF16949五大工具介绍
- Facebook的图片搜索技术揭秘
- 代码统计工具有哪几种_抖音小程序如何开发及类型有哪几种?
- Ceph浅析”系列之四——Ceph的结构
- arm搭建云手机教程_云计算培训教程学习路线视频源码课件:seafile私有网盘搭建...
- Webservice工具soapUI下载和使用
- 解决Edge不兼容onpropertychange的方法
- AP6212认证_自适应测试
- 高端玩家的运营与维护
- Cesium|xt3d 雷达追踪圆锥体
- office2010 手动卸载和安装提示
- android 恢复出厂设置 代码,android恢复出厂设置以及系统升级流程