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. v-bind指令动态绑定class和内联样式style

    动态绑定class—概述 数据绑定(v-bind指令)一个常见需求是操作元素的 class 列表.因为class是元素的一个属性,我们可以用 v-bind 处理它们 我们只需要计算出表达式最终的字符串 ...

  2. Java虚拟机4:Java对象创建和对象访问

    1.对象创建 Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(克隆.反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此.看一下在虚拟 ...

  3. 课外知识----easy BCD

    可以用来作系统之间的切换 使用方法略

  4. minimum-depth-of-binary-tree (搜索)

    题意:输出一个二叉树的最小深度. 思路:搜索一下就行了. 注意:搜索的时候,是比较每个子树的左右子树的大小,每个子树的深度要加上根节点! class Solution { public: int ru ...

  5. laravel框架入门

    本文摘自网络,个人感觉写的很不错,决定收藏一下纯属本人学习之用 本文介绍如何开始使用 Laravel. 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库: L ...

  6. (1)HomeAssistant 安装开始

    https://www.hachina.io/docs/1843.html 在Windows中安装Python3和HomeAssistant 第一步:在浏览器中访问Python官网网址为:www.py ...

  7. oracle 查询分区表的最大分区以及分区字段的最大值

    select 'select max(' || column_name || ') from ' || owner || '.' || name || ';'  from DBA_PART_KEY_C ...

  8. Random.nextInt()替换Math.random()

    在项目中使用哪个随机数 文章参考 http://liukai.iteye.com/blog/433718 今天用了find bugs后查出来了个问题 Google了下 发现 Random.nextin ...

  9. ES6中Object.assign() 方法

    ES6中Object.assign() 方法 1. 对象合并Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象上.如下代码演示: var targ ...

  10. Python脱产8期 Day03 2019/4/15

    一 变量的命名规范 1.只能由 字母, 数字,  _, 组成. 2. 不能以数字开头 3.避免与系统关键字重名:重名不会报错,但系统的功能就被自定义的功能屏蔽掉了(严重不建议这样来做) 4.以_开头的 ...