LinuxShell脚本——循环结构

摘要:本文主要学习了Shell脚本中的循环结构。

while循环

基本语法

while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出循环:

 while 条件
do
命令
done

注意,在循环体命令中必须有相应的语句使得条件“不成立”,只有这样才能最终退出循环,否则就成了死循环,一直执行下去,永无休止。

使用举例

打印0到100的累加后得到的值:

 #!/bin/bash
i=
sum=
while (( i <= ))
do
(( sum += i ))
(( i++ ))
done
echo ${sum}

until循环

基本语法

unti循环和while循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环:

 until 条件
do
命令
done

使用举例

打印0到100的累加后得到的值:

 #!/bin/bash
i=
sum=
until (( i <= ))
do
(( sum += i))
(( i-- ))
done
echo ${sum}

for循环

基本语法

 for ((初始化表达式; 判断表达式; 修改变量表达式))
do
命令
done

初始化表达式只会在循环执行前执行一遍,判断表达式每次都会进行判断,修改变量表达式会修改影响了判断表达式的。

使用举例

 #!/bin/bash
sum=;
for (( i=; i <= ; i++ ))
do
(( sum += i))
done
echo ${sum}

for-in循环

基本语法

 for 变量名 in 取值列表
do
命令
done

取值列表

取值列表的形式有多种,你可以直接给出具体的值,也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符。

1)直接给出具体的值

可以在in关键字后面直接给出具体的值,多个值之间以空格分隔。比如1 2 3 4 5、"abc" "390" "tom"等。

2)给出一个取值范围

取值范围的具体格式为 {start..end} 。比如 {..} 。

3)使用命令的执行结果

使用反引号`命令`或者$(命令)获取到值,然后可以取得命令的执行结果作为取值列表。比如 $(ls *.sh) 。

4)使用Shell通配符

Shell通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件,而不是文本。比如 *.sh 。

5)使用特殊变量

Shell中有多个特殊的变量,在取值列表中可以使用。比如$#、$*、$@、$?、$$。

使用举例

使用具体的值:

 #!/bin/bash
sum=;
for n in
do
(( sum += n ))
done
echo ${sum}

使用取值范围:

 #!/bin/bash
for c in {a..z}
do
echo $c
done

使用在调用Shell脚本时传入的值,可以省略 in 取值列表 部分:

 #!/bin/bash
for c
do
echo $c
done

select-in循环

基本语法

select-in循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。

select-in是Shell独有的一种循环,非常适合终端(Terminal)这样的交互场景,C语言、C++、Java、Python、C#等其它编程语言中是没有的。

 select 变量名 in 取值列表
do
命令
done

使用举例

编写Shell:

 #!/bin/bash
echo "What's Your Gender?"
select name in "Mem" "Women"
do
echo "Choose $name"
done
echo "End Shell"

执行Shell并退出:

 [root@localhost ~]# sh test.sh
What's Your Gender?
) Mem
) Women
#?
Choose Mem
#?
Choose Women
#?
Choose Mem
#?
End Shell
[root@localhost ~]#

说明:

使用 #? 用来提示用户输入菜单编号。按下Ctrl+D组合键结束select-in循环。

运行到select语句后,取值列表中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量,然后再执行循环体中的命令部分。

每次循环时select都会要求用户输入菜单编号,并使用环境变量PS3的值作为提示符,PS3的默认值为 #? ,修改PS3的值就可以修改提示符。

如果用户输入的菜单编号不在范围之内,那么就会给变量赋一个空值,如果用户输入一个空值(什么也不输入,直接回车),会重新显示一遍菜单。

注意,select是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到break语句,或者按下Ctrl+D组合键才能结束循环。

LinuxShell脚本——循环结构的更多相关文章

  1. LinuxShell脚本——选择结构

    LinuxShell脚本——选择结构 摘要:本文主要学习了Shell脚本中的选择结构. if-else语句 基本语法 最简单的用法就是只使用if语句,它的语法格式为: if 条件 then 命令 fi ...

  2. shell脚本--循环结构

    shell的循环结构有while和for两种 for循环 #!/bin/bash #文件名:test.sh i=4 for i in 2 4 6 8 10 do echo $i done echo $ ...

  3. Shell基础(三):使用for循环结构、使用while循环结构、基于case分支编写脚本、使用Shell函数、中断及退出

    一.使用for循环结构 目标: 本案例要求编写一个Shell脚本chkhosts.sh,利用for循环来检测多个主机的存活状态,相关要求及说明如下: 1> 对192.168.4.0/24网段执行 ...

  4. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  5. LinuxShell脚本——认识Shell脚本

    LinuxShell脚本——认识Shell脚本 摘要:本文主要介绍了Shell脚本的一些基本知识. 什么是Shell脚本 shell脚本是利用shell的功能所写的一个程序,这个程序是使用纯文本文件, ...

  6. Linux--shell脚本之文本处理工具

    文本处理工具--grep.sed.awk Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配. 而grep又有助于理 ...

  7. shell的编程结构体(函数、条件结构、循环结构)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 shell函数 在shell中,函数可以被当作命令一样 ...

  8. shell条件控制和循环结构

    一.简介 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于“当型循环”,而until属于“直到 ...

  9. Java基础-程序流程控制第二弹(循环结构)

    Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...

随机推荐

  1. el-dialog模态窗点击空白不消失

    通过查阅ElementUI的官方文档,可以发现Dialog对话框组件提供了一个close-on-click-modal属性来设置el-dialog模态窗点击空白不消失. <el-dialog : ...

  2. 多线程七 AQS

    一 . 简介AQS AQS简介 在同步组件的实现中,AQS是核心部分,同步组件的实现者,通过使用AQS提供的模板方法 实现同步组件语义 AQS实现了对同步状态的管理以及阻塞线程进行排队,等待通知等等一 ...

  3. .net core 反射的介绍与使用

      1. 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能.   2. Type类的介绍  是BCL(基 ...

  4. wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍TCP排序方法,分享一个Windows版的TCP排序工具." 在分析协议的过程中,不可避免地需要抓包. 无论抓包条件如何优越, ...

  5. android笔记--Intent和IntentFilter详解

    本文转载自:https://www.cnblogs.com/liushengjie/archive/2012/08/30/2663066.html 本文转载自:https://www.cnblogs. ...

  6. 记录NodeJs常用工具

    安装模块 npm install [-g] module express supervisor:改代码自动重启服务 用法>> supervisor xxx.js 搜索模块 npm sear ...

  7. 由导入paramkio包失败,而pip list又能查到此包,而引出的:离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(下:Linux环境中)

    问题描述: 公司的Linux服务器是内网,今天要实现某个功能,会用到python控制ssh,需要安装一个Paramkio库,和上一篇一样,仅仅依靠Pypi上下载下来的离线.whl安装包是不行的,lin ...

  8. Linux下的 mariadb 使用 root 用户启动方式

    近日因测试安全产品需要,想调整mariadb的启动用户为root, 经历一番波折后终于成功! 注意:以root身份启动mysql是一项非常危险行为,相当于给了数据库操作用户(数据库管理员或黑客)一个通 ...

  9. Druid-代码段-1-5

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程1.4,抛弃连接: //丢弃连接 public void discardConnection(Connection real ...

  10. Java流程控制之选择语句

    选择语句 选择语句也称之为判断语句,主要有2种写法,一种是if语句,一种是switch语句.下面我们就详细的介绍一下这2种语句的用法. 判断语句if if语句第一种形式: if 格式: 执行流程 首先 ...