shell的循环结构有while和for两种

for循环

#!/bin/bash
#文件名:test.sh i=4 for i in 2 4 6 8 10
do
echo $i
done

echo $i

  运行:

ubuntu@ubuntu:~$ ./test.sh
2
4
6
8
10
10
ubuntu@ubuntu:~$

  注意最后一次输出是10,而不是其他语言中输出4,这一点和JavaScript很类似。

  for循环要循环的内容就是跟在in后面,然后以空格分隔,可能要循环的内容特别多,那么就可以将要循环的内容保存在一个文件中,然后读出来即可。比如下面:

#!/bin/bash
#文件名:test.sh for i in `cat test.txt`
do
echo $i
done
echo $i

  往test.txt中添加一点内容:

ubuntu@ubuntu:~$ echo 1 3 5 7 9 > test.txt
ubuntu@ubuntu:~$ ./test.sh
1
3
5
7
9
9
ubuntu@ubuntu:~$

  shell默认会将空格、制表符(\t)、换行看做是分隔符,所以:

  1、无论内容是以换行或者制表符分隔,for循环都会将其看作是空格分隔,效果上是一样的。

  同时要注意,如果for循环中,集合中的某一项中间包含空格,那么请使用引号将其括起来,因为for循环是以空格分隔的。

  前面讲for循环和其他语言的for循环形式上的差别很大,但是呢,其实shell中for循环也可以向其他语言那样是用for,例子如下:

#!/bin/bash
#文件名:test.sh for ((i=0;i<4;i++))
do
echo $i
done

  运行:

ubuntu@ubuntu:~$ ./test.sh
0
1
2
3
ubuntu@ubuntu:~$

  一定要注意着一种for循环中,使用的是两对括号,在括号中使用像其他语言的三个表达式的格式。其实着一种for循环的do和done可以换成{  和  } 。仅限于for循环,其他循环和判断结构不适用。

自定义分隔符

  上面已经说了,shell默认是以空格、制表符、换行进行分隔,那么如果需要强制分隔符是什么时,可以修改IFS这个环境变量。

#!/bin/bash
#文件名:test.sh IFS='x' #以x为分隔
#IFS=':' #以:为分隔
#IFS=$'\n' #如果是特殊字符,需要在前面加上$
v="aaaaxbbbbbxcccccxddddd"
#其实$v此时的内容是aaaa bbbbb ccccc dddd
for s in $v
do
echo $s
done

  运行:

ubuntu@ubuntu:~$ ./test.sh
aaaa
bbbbb
ccccc
ddddd

  

  

while循环

  while后面跟着判断条件,判断条件可以为多个,但是每一个判断条件都要是用单独的 [  ]括起来,然后多个判断之间使用 &&、||来表示含义。

  例子:

#!/bin/bash
#文件名:test.sh tot=0
num=10
while [ $num -gt 0 ]
do
tot=$[ $tot + $num ]
num=$[ $num - 1 ]
done echo "总和为"$tot

  运行结果如下:

ubuntu@ubuntu:~$ ./test.sh
总和为55
ubuntu@ubuntu:~$

  

until循环

  until循环和while循环刚好相反

  对于while,如果条件成立,则进入循环,否则条件不成立时,就结束循环。

  until则是相反的,如果条件不成立,则进入循环;如果条件成立,则结束循环。

  用until改写上面的例子:

#!/bin/bash
#文件名:test.sh tot=0
num=10
#num小于或等于0时,结束循环,否则进入循环
until [ $num -le 0 ]
do
tot=$[ $tot + $num ]
num=$[ $num - 1 ]
done echo "总和为"$tot

  运行测试结果和上面一样。

shell脚本--循环结构的更多相关文章

  1. LinuxShell脚本——循环结构

    LinuxShell脚本——循环结构 摘要:本文主要学习了Shell脚本中的循环结构. while循环 基本语法 while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出 ...

  2. Linux shell for循环结构

    Linux Shell   for循环结构 循环结构            1:循环开始条件      2:循环操作      3:循环终止的条件 shell语言          for,while ...

  3. shell脚本-循环选择语句

    shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...

  4. 没事就要多做多练,Shell脚本循环例题做一做

    Shell脚本循环例题                 一.示例1                 二.示例2                 三.示例3                 四.示例4 ...

  5. 3.shell脚本循环试题

    shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...

  6. shell脚本循环嵌套

    嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...

  7. shell脚本循环和信号

    条件判断 if     条件1:then COMMAND elif  条件2:then COMMAND else COMMAND(:)        :  表示pass  不执行任何命令 fi 读取用 ...

  8. shell脚本循环处理文件数据

    有一个日志文件为: # cat data.log 需要提取出里面的数据,写shell脚本实现这个功能: #!/bin/bash OLD=$IFS IFS=$'\n' for entry in $(ca ...

  9. shell脚本循环执行mysql语句

    参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...

随机推荐

  1. vue的组件详解

    什么是组件 组件(Component)是 Vue.js 最强大的功能之一.(好比电脑中的每一个元件(键盘,鼠标,CPU),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行互相融合,变 ...

  2. 协程与concurent.furtrue实现线程池与进程池

    1concurent.furtrue实现线程池与进程池 2协程 1concurent.furtrue实现线程池与进程池 实现进程池 #进程池 from concurrent.futures impor ...

  3. 布隆过滤BitMap原理

    一.问题引入 BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,怎么理解呢?举一个例子,有一个无序有界int数组{1,2,5,7},初步估计占用内存44=16字节,这倒是 ...

  4. (一 ) 天猫精灵接入Home Assistant-服务器搭建

    ()1登陆阿里云 https://ecs.console.aliyun.com/?spm=5176.2020520001.0.0.6B1Uov#/home 账号dongdongmqtt 密码***** ...

  5. 树莓派3b安装Apache2+PHP+MySQL+phpyadmin

    树莓派型号:3B+ 系统环境:2017-04-10-raspbian-jessie 先更新一下源 BASIC sudo apt-get update 安装Apache2 BASIC sudo apt- ...

  6. not annotated with HTTP method type (ex. GET, POST) 问题解决

    大多数情况是真的而没有写method = RequestMethod.GET.POST等注解, 有时这么写了也报类似异常,如下 @FeignClient("microservice-prov ...

  7. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...

  8. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...

  9. C. Report

    题意:给出n个无序的数以及m个操作,每个操作由两个数组成,第一个数是操作的方式,第二个数 i 是操作的范围,若第一个数是1,则给 1-i 个数按升序排序,若第二个数是2,则给 1-i 个数按降序排列. ...

  10. java計算年齡的工具類

    整理一篇Java計算年齡的工具類,方便實用 public static int getAgeByBirth(String birthday) throws ParseException { // 格式 ...