shell循环判断语法
for循环
for循环数字1-100得出数字1到100的和 [[email?protected] src]# cat fors.sh #!/bin/bash sum=0 for a in `seq 1 100` do ? sum=$[$a+$sum] done echo $sum [[email?protected] src]# sh -x fors.sh + sum=0 ? ? ? ? ? ? 部分执行过程 ++ seq 1 100 + for a in ‘`seq 1 100`‘ + sum=1 + for a in ‘`seq 1 100`‘ + sum=3 + for a in ‘`seq 1 100`‘ + sum=6 .................省略 + for a in ‘`seq 1 100`‘ + sum=4851 + for a in ‘`seq 1 100`‘ + sum=4950 + for a in ‘`seq 1 100`‘ + sum=5050 + echo 5050 for循环遍历出文件或目录,这里遍历出某个目录下的所有目录。使用if ?-d来判断是否是个目录 [[email?protected] src]# cat fors.sh #!/bin/bash cd /usr/local/src/ for a in `ls /usr/local/src` do ?if [ -d $a ] ? ?then ? echo $a ?fi done [[email?protected] src]# sh fors.sh cmake-3.12.2 nginx-1.15.2 php-5.6.37 php-7.1.21 zabbix-3.4.13 for循环会对空格和回车符作为分割符处理,在遍历后会把以空格相连的文件名会处理成两个文件(会变为两个文件名称来显示),如有以下几个文件: [[email?protected] src]# ll *.txt -rw-r--r-- 1 root root 75 Sep 17 16:32 1.txt -rw-r--r-- 1 root root 0 Sep 17 16:32 2.txt -rw-r--r-- 1 root root 0 Sep 17 16:32 5 3.txt [[email?protected] src]# sh foss.sh /usr/local/src/1.txt /usr/local/src/2.txt /usr/local/src/5 3.txt for循环处理空格分割的文件或字符串时会把空格作为换行符来处理,导致一个含有空格的目录或文件的一串字符会变为两串字符 while循环语法 while 条件; do 语句; done ? ? ? ?//这个写法的 true和while :; ?表示死循环 这里使用while循环简单判断监控一个数值,如果获取的数值大于特定值则执行某些操作,操作可以是执行发送邮件,sleep表示每隔多少秒执行一次整个循环 [r[email?protected] src]# cat while.sh #!/bin/bash while true do ? load=`w |head -1 |awk -F ‘load average:‘ ‘{print $2}‘ |cut -d. -f1` ? ?if [ $load -gt 10 ] ? ? ?then ? ? ? ? echo "1234" ? ? ? ? //这里也可以是发送邮件的命令 ? ?fi ? ? ? sleep 10 ?done while结合if来判断一个输入的数值是否符合规则 while :; ? do ? ? read -p "Please input a number: " n ?if [ -z "$n" ] ? ? then ? ? ? echo "输入验证" ? ? ? ? continue ?fi ? ?n1=`echo $n |sed ‘s/[-0-9]//g‘` ?if [ ! ?-z "$n1" ] ? ? then ? ? ? echo "请输入一个纯数字" ? ? ? ? continue ?fi ? ? break done echo $n break跳出循环在循环判断中,如果获取的一个变量大于或等于特定值时,则会执行该判断下的执行语句,这个语句且是break跳出动作并继续执行脚本中剩下的语句,那么这个循环如果等于或大于这个特定值就会执行break,执行break后,则这个循环中还有其他语句或判断的话则不会去执行了,直接终止这个循环语句 [[email?protected] src]# cat while.sh #!/bin/bash for i in `seq 1 4` do echo $i ? if [ $i -eq 3 ] ? ? then ? ? ? break ? fi ?echo $i done echo abc [[email?protected] src]# sh while.sh 1 1 2 2 3 abc continue结束本次循环continue结束的循环是匹配特定值的本次循环。如果获取的数值等于或大于特定值,则结束本次循环,并终止执行continue以下的语句。但是结束本次循环后并非退出循环,而是继续从循环中获取数据来执行特定语句,直到这个循环范围结束(如1-6、a-f ?等) [[email?protected] src]# cat continue.sh #!/bin/bash for i in `seq 1 4` do echo $i ? if [ $i -eq 3 ] ? ? then ? ? ? continue ? fi ?echo $i done echo abc [[email?protected] src]# sh while.sh 1 1 2 2 3 4 4 5 5 abc exit退出整个脚本如果判断一个从循环获取的变量大于或等于特定值,恰好循环获取的值匹配上了特定值时,则会执行该判断下的语句和exit退出动作,exit ?退出表示我之下的所有内容和不在我这个循环内的内容都不执行了,直接退出整个脚本 ? [[email?protected] src]# cat exit.sh #!/bin/bash for i in `seq 1 5` do ? ?echo $i ? ?if [ $i == 3 ] ? ?then ? ? ? ?exit ? ?fi ? ?echo $i done echo aaaaaaa (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |