while及until循环结构

while CONDITION;do
statement
done 进入循环:条件满足
退出循环:条件不满足 当需要命令的执行状态返回值时,可以直接把整个命令当做循环的条件 until CONDITION;do
statement
...
done 进入循环:条件不满足
退出循环:条件不满足

退出循环的控制关键词

break:提前退出循环,将不再执行循环
continue:提前结束本轮循环,而进入下一轮循环
:|true:表示为死循环(永远为真) Example1:
#!/bin/bash
declare -i sum=0
declare -i i=0
while ((i<100));do #此处必须小于100,否则会多出i=101
let i++
if [ $[$i%2] -eq 0 ];then
continue
fi
let sum+=i
done
echo "$sum"
计算100以内奇数的和 Example2:
#!/bin/bash
declare -i sum=0
for i in {1..1000};do
let sum+=i
if [ $sum -gt 5000 ];then
break
fi
done
echo "$i"
echo "$sum"
当sum的值大于5000时,退出整个循环 Example3:
#!/bin/bash
while :;do
read -p "please input file: " FILE
[ $FILE == 'quit' ] && break
if [ -e $FILE ];then
echo "$FILE exists"
else
echo "no $FILE file"
fi
done
echo "quit..."

while的特殊用法

while read LINE;do
循环体
done < /PATH/TO/SOMEFILE
通过read命令读取文件中的每一行,每次读取一行,读取一行循环一次,并且把每一行的内容赋值给LINE变量,可以通过循环体对LINE变量进行处理 Example:
#!/bin/bash
FILE=/etc/passwd
declare -i i=0
while read LINE;do
[ `echo $LINE | awk -F: '{print $7}'` == '/bin/bash' ] && echo `echo $LINE | awk -F: '{print $1}'` && let i++
[ $i -eq 6 ] && break
done < $FILE
读取文件中的一行,把一行的内容赋值给LINE,对LINE进行判断,如果是/bin/bash,就显示用户名,并且i的值+1,当i的值等于6的时候,退出循环;不能把 let i++和前面的判断分开,否则判断不成功i的值也会加1;i=6时退出循环

示例

Example1:
#!/bin/bash
read -p "Input something: " STRING #通过read -p跟上想要打印的提示信息,后面输入的参数将被赋值给STRING这个变量;read -p也可以配合case
while [ $STRING != 'quit' ];do
echo "$STRING" | tr 'a-z' 'A-Z'
read -p "Again input something: " STRING
done
输出一个变量,变量值不等于quit时进入循环,大小写替换,然后再输出变量值,判断变量值是否等于不等于quit,不等于以此类推继续循环,等于quit则退出循环 Example2:
#!/bin/bash
until who|grep "hadoop" &>/dev/null;do
echo "hadoop is no sign-in"
sleep 5
done
echo "hadoop is log in"
判断条件中的命令是否是对的,当命令不对的时候进入循环,显示打印一行字和sleep 5秒,然后再判断命令是否错误,错误继续循环,命令正确则退出循环 Example3:
#!/bin/bash
who|grep "hadoop" &>/dev/null
RETURN=$?
until [ $RETURN -eq 0 ];do
echo "hadoop is no sign-in"
sleep 5
who|grep "hadoop" &>/dev/null
RETURN=$?
done
echo "hadoop is log in"
Example2是对命令的执行状态进行判断,这个是取出命令执行状态的返回值进行条件判断 Example4:
#!/bin/bash
declare -i sum=0
declare -i i=1
while ((i<=100));do
let sum+=i #sum+=i = sum=$[$sum+$i]
let i++
done
echo "$sum"
i初始值为1,判断i是小于等于100,执行sum+=i,执行完后让i的值加1,i=2;再次判断i是否小于等于100,满足继续执行循环,以此类推;不满足则退出循环 Example5:
#!/bin/bash
while ! bash -n $1 &>/dev/null ;do
read -p "Scripts syntax error,Please input any key edit scripts or q|Q quit: " SCRIPT
case $SCRIPT in
q|Q)
echo "quit edit..."
exit 8
;;
*)
vim $1
;;
esac
done
检查脚本,脚本语法错误时将进入循环;当输入q或者Q时,退出脚本;当输入任意键则vim编辑脚本,脚本修改完后会继续循环检查脚本语法,如果脚本语法还有错误,将继续执行退出或者编辑;脚本语法无错误时,将不进入循环

for循环的C语言风格形式

for循环基本形式:
for 变量;do
循环体
done for循环的C语言风格形式:
for (( expr1 ; expr2 ; expr3 )); do
循环体
done
expr1指定变量的初始值、expr2判定何时退出循环、expr3修正变量的值 Example1:
#!/bin/bash
declare -i SUM=0
for (( I=2;I<=100;I+=2));do I+=2 = I=$[$I+2]
let SUM+=$I SUM+=$I = SUM=$[$SUM+$I]
done
echo "$SUM"
I变量的初始值为2,2是小于等于100,执行循环体;执行完本次循环后,执行I+=2,得出的数是4,判断4是小于等于100的,再次执行循环体,以此类推,得出100内偶数相加的和是多少 Example2:

用while循环、until循环、for循环(两种方法)通过ping命令测试192.168.0.151——192.168.0.254之间的所有主机是否在线;在线显示up,不在线显示down

for(第一种方法):
#!/bin/bash
for i in {151..254};do
if ping -c 1 -W 1 192.168.0.$i &>/dev/null;then #-c表示测试1次,-W表示超时时长,以秒为单位
echo "192.168.0.$i is up"
else
echo "192.168.0.$i is down"
fi
done for(第二种方法):
#!/bin/bash
for (( i=151;i<=254;i++ ));do
ping -c 1 -W 1 192.168.0.$i &>/dev/null
PIN=$?
if [ ! $PIN -eq 0 ];then
echo "192.168.0.$i is down"
else
echo "192.168.0.$i is up"
fi
done while:
#!/bin/bash
declare -i I=151
while ((I<=254));do
ping -c 1 -W 1 192.168.0.$I &>/dev/null
PIN=$?
if [ $PIN -eq 0 ];then
echo "192.168.0.$I is up"
else
echo "192.168.0.$I is down"
fi
let I++
done while:(第二种用法)
#!/bin/bash
read -p "Please input number: " I
while [ $I -le 254 ];do
if ping -c 1 -W 1 192.158.0.$I &>/dev/null;then
echo "192.168.0.$I is up"
else
echo "192.168.0.$I is down"
fi
let I++
done until:
#!/bin/bash
declare -i I=151
until [ $I -gt 254 ];do
if ping -c 1 -W 1 192.168.38.$I &>/dev/null;then
echo "192.168.38.$I is up"
else
echo "192.168.38.$I is down"
fi
let I++
done

shell脚本编程基础之while、for、until循环的更多相关文章

  1. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  2. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  3. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  4. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

  5. shell脚本编程基础

       最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础    shell脚本是利用shell的功能 ...

  6. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础程序:指令+数据程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心 ...

  9. Shell脚本编程基础笔记一

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html 一:脚本文件的创建.格式.运行 1:创建shell脚本 首先,要创建一个文件 touch ...

  10. Shell 脚本编程基础

    通过本文记录学习Linux Shell的一些笔记思考和总结,以加强记忆和理解.主要学习参考资料有: 1.<鸟哥的Linux私房菜-基础篇>第四版 2.菜鸟教程——Linux教程 3.ear ...

随机推荐

  1. angular复习笔记2-架构总览

    angular架构总览 一个完整的Angular应用主要由6个重要部分构成,分别是:组件.模板.指令.服务.依赖注入和路由.这些组成部分各司其职,而又紧密协作,它们的关系如图所示. 与用户直接交互的是 ...

  2. Javascript判断参数类型

    function (options, param) { alert(typeof options); if (typeof options == "string") { alert ...

  3. Exception和RuntimeException区别

    Exception:强制性要求用户必须进行处理: RuntimeException:是Exception的子类,由用户选择是否进行处理:

  4. PHP CI框架调试开启报错信息方法

    方法如下三种: 1.php.ini 设置 display_errors = On error_reporting = E_ALL | E_STRICT 2.ci index.php 设置 define ...

  5. 想知道使用OPC服务器时如何设置DCOM?看完本文就懂了(下)

    接上文...... “安全”选项卡“安全”选项卡上,有3个选项需要设置. 启动权限 选择“使用默认值”选项 访问权限 选择“使用默认值”选项 配置权限 选择“自定义”选项,然后单击“编辑” 将打开一个 ...

  6. HttpClient实战三:Spring整合HttpClient连接池

    简介 在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行H ...

  7. js计算两个时间差 天 时 分 秒 毫秒

    // 计算两个时间差 dateBegin 开始时间 function timeFn(dateBegin) { //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 var dateEnd = ...

  8. django数据表生成

    在创建的app中models.py生成表结构 class 表名(models.Model): #表名一般首字母大写 中突出信息的大写 列名=models.Charfield(max_lenth=) # ...

  9. Linux环境宿主机进入Docker容器、连接数据库、复制文件

    我们默认mysql容器已经正常启动,以下为关键命令.1.docker exec -it mysql bash : 进入已经正常启动的容器bash中,mysql是指实际容器名称.2.mysql -uro ...

  10. 详解Linux获取启动盘路径命令--fdisk、sfdisk -l、lsblk

    概述 linux引导磁盘路径可以用于任何问题的故障诊断.这个引导分区或路径包含GRUB配置的Linux引导装载程序.那么我们可以怎么找到当前Linux引导磁盘路径呢? 基本上有三种方法可以找到当前Li ...