300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > shell条件测试操作 if分支 for循环 while 循环

shell条件测试操作 if分支 for循环 while 循环

时间:2024-01-12 10:34:47

相关推荐

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 $? #如果为空值则输出为01[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/bashread -p "请输入一个用户名" a[ -z $a] && echo "给我名字!" && exit #如果没有输入用户名输出"给我名字!"然后直接退出useradd $astty -echoread -p "请输入密码" pstty echo echo $p | passwd --stdin $a[root@server0 opt]# bash test01.sh请输入一个用户名给我名字!

[root@server0 opt]# ls && ls && ls#三次都执行成功rh test01.shrh test01.shrh test01.sh[root@server0 opt]# ls || ls || ls#只有第一个条件成功rh test01.sh[root@server0 opt]# ls || ls && ls#第一个条件和第三个条件执行成功rh test01.shrh test01.sh[root@server0 opt]# ls && ls || ls#第一个条件和第二个条件执行成功rh test01.shrh test01.sh

数字的条件测试:

[root@server0 opt]# [ 10 -gt 10 ] || echo "ok"&& echo "no"okno #两次执行均成功,显示OK和no[root@server0 opt]# [ 10 -gt 10 ] && echo "ok"|| echo "no"no #前次执行不成功

编写一个脚本:

每隔两分钟检查主机的登录账户数量,如果超过3人,则发邮件给管理员报警

[root@server0 opt]# vim test02.sh #!/bin/basha=$(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"& 1Status: 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#查看邮件

对文件进行测试:

[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/bashif [ $USER == root ];thenecho "ok"elseecho "no"fi[root@server0 opt]# bash test03.shok[root@server0 opt]# su - student[student@server0 ~]$ cd /opt[student@server0 opt]$ bash test03.sh no

if多分支:

[root@server0 opt]# vim test04.sh #!/bin/bashread -p "请输入数字" nif [ $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/bashping -c 3 -i 0.2 -W 1 172.25.0.12 &> /dev/nullif [ $? -eq 0];thenecho "通了"elseecho "不通"fi[root@server0 opt]# bash test05.sh不通

编写一个脚本:

猜数游戏,计算机出一个随机的数字,你出一个数字,比计算机大则输出猜大了,比计算机小则输出猜小了,一样则输出恭喜你猜中了!

[root@server0 opt]# vim test06.sh#!/bin/bashfor i in {1..20}dox=$[$RANDOM%10]read -p "请输入一个数字(0-9)" nif [ $x -eq $n ];thenecho "恭喜,猜对了!"&& exitelif [ $n -lt $x ];thenecho "猜小了,想知道正确答案吗,求我呀!"elseecho "猜大了,垃圾!"fidone

for循环

for 变量名称 in 值1 值2 值 3....

do

指令

done

[root@server0 opt]# vim test07.sh#!/bin/basha=0b=0for i in `seq 15` #也可以写成{1..15}doping -c 3 -i 0.1 -W 1 172.25.0.$i &> /dev/nullif [ $? -eq 0 ];thenecho "172.25.0.$i通了"let a++elseecho "172.25.0.$i不通"let b++fidone[root@server0 opt]# bash test07.sh172.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/bashwhile : #冒号代表无限循环doecho 123sleep 0.1done

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。