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表示每隔多少秒执行一次整个循环

[[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循环输入一个 数值来正确判断,来判断输入的值是否是一个纯数字,如果不是则会继续执行循环让继续来输入值,直到输入正确为止,直至输入正确后才会结束并退出这个while循环
第一次read -p把输入值赋予给变量n,让变量n和一个特定值做下比对,如果符合条件则跳过这个判断结果并使用continue结束单次循环并echo出结果。
如果输入的字符不为数字,且变量不是空的话,那么该次判断不会结束循环并往下执行。将输入变量所有的数字替换为空。
如果包含字母则无法替换为空。并且把替换的这个结果做一个非空判断,如果输入的是数字的话,那么这个值已经被替换成空的了。如果是非数字则不能针对字母做替换,然后继续循环让输入一个纯数字

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

原文地址:http://blog.51cto.com/8844414/2176405

时间: 2024-10-31 05:23:14

shell循环判断语法的相关文章

shell循环判断输入值

until [[ $flag == "yes" || $flag == "exit" ]] do read -p "请确认统一/合服前后数据是否一致,输入yes继续执行脚本,输入exit退出:" flag if [[ $flag = "yes" ]]; then break elif [[ $flag = "exit" ]];then exit else continue fi done 做个记录

shell文本过滤编程(六):awk之循环判断及数组

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 与上一节printf一样,awk的循环判断和C语言的循环判断语法极其类似. 1. While循环 #!/bin/sh awk ' BEGIN { ORS="" } { i=0 while (i < NF) { printf("* ") i++ } print "\n" } ' group_file1 首先,

Shell中条件判断语法与判断条件

一,简介 Shell各种判断结构和运算符的用法是shell编程的基础,了解shell的判断.运算符和一些退出状态 对后面的学习有很重要的影响.shell有一个内部命令test经常用于对判断语句 进行测试一种或几种状态的条件是否成立 二. 判断条件 (1)Linux的shell中的测试命令,用于测试某种条件或某几种条件是否真实存在 测试命令是判断语句和循环语句中条件测试的工具,对判断和运算符的比较测试有很大的帮助. (2)测试条件为真,返回一个0值:      为假,返回一个非0整数值 测试命令有

[Shell]条件判断与流程控制:if, case, for, while, until

-------------------------------------------------------------------------------------------------------- [条件判断] 1. 按文件类型进行判断 -b 文件    判断该文件是否存在,并且为块设备文件(是块设备文件为真) -c 文件    判断该文件是否存在,并且为字符设备文件(是字符设备文件为真) -d 文件    判断该文件是否存在,并且为目录文件(是目录为真) -e 文件    判断该文

shell编程基本语法

编写shell脚本的时候,最前面要加上一行:#!/bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器. 一.shell变量 shell变量和一些编程语言不同,一般shell的变量赋值的时候不用带"$",而使用或者输出的时候要带"$".加减乘除的时候要加两层小括号.括号外面要有一个"$",括号里面的变量可以不用"$".需要注意的是

shell基础 -- 基本语法

本文介绍一下 shell 的语法. 一.变量 在 shell 里,使用变量之前通常并不需要事先为他们做出声明,需要使用的时候直接创建就行了.默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们被赋值为数值时也是如此.shell 和一些工具会在需要时把数值型字符串转换成对应的数值以对它们进行操作. 1.1 变量的命名 shell 变量的命名规则如下:开头是一个字母或下划线,后面可以接任意长度的字母.数字或下划线符号,变量名的字符长度并无限制(Bourne shell中).不过为了兼容性(一

最全shell脚本语句语法使用(超详细)

博文大纲: 1.对谈式脚本--read语句 2.shell脚本中的测试的字符 3.判断脚本举例 4.条件判断--if语句 5.条件判断--case语句 6.条件判断--function函数结合case语句 7.循环判断--while.until语句 8.固定循环--for...do...done语句 9.循环--cut.set结合for语句 10.其他脚本类型举例 11.shell脚本的追踪与debug shell脚本的编写越规范越好,那么通常在每个shell脚本的开头几行会有如下几个方面相关的

shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断

一.if判断 数字: $A=12 $B=15 if(("$A"<"$B")) if(("$A"=="$B")) 字符串: $A="HELLO" $B="WORLD" if [ "$A" = "FACT_LOGIN_USER" ] if [ "$A" = "$B" ] PS:字符串比较的时候注意 'if'

shell条件判断

条件判断式 只要讲到程序的话,那么条件判断式,亦即是if then这种判别式肯定一定要学习的,另外一种是case...esac if....then 这个是if...then 是最常见的条件判断式了,它分为单分支条件判断式,双分支条件判断式,多分支条件判断式 单分支条件判断语句: if [ 条件判断式 ] then 输出内容 fi 双分支条件判断式: if [ 条件判断式 ] then 输出内容 else 输出内容 fi 多分支条件判断式 if [ 条件判断式 ] then 输出内容 elif