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

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

最新文章

  1. Hive metastore三种配置方式
  2. ubifs概述
  3. 飞思卡尔imx6开发板Linux下GPIO驱动
  4. C#编程利器之二:结构与枚举(Structure and enumeration)【转】
  5. 转载:第四弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!
  6. System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list
  7. hadoop命令行命令
  8. Java编程规范实践
  9. Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
  10. vsftpd.conf配置详解
  11. JQuery的二维码插件
  12. jdbc 获取connection 对象的三种方式
  13. C# 过滤SerialPort端口
  14. VTune使用amplxe-cl进行Hardware Event-based Sampling Analysis 0分析
  15. HDU 5889 Barricade
  16. python爬虫——写出最简单的网页爬虫
  17. 第四十四条:为所有导出的API元素编写文档注释
  18. 1.1、Libgdx目标和特性
  19. 关于表单元素的name及HTML中的id
  20. 20155235 《网络攻防》 实验八 Web基础

热门文章

  1. 【BZOJ2820】YY的GCD
  2. 阿里巴巴Java开发手册要点笔记 (一)
  3. springboot 传值到页面
  4. KVM虚拟化图
  5. STM8
  6. 转载 SpringMVC详解(一)------入门实例
  7. Intel支持八九代酷睿的B365芯片组将登场亮相
  8. java 二维数组和对象数组
  9. ingress rewrite
  10. kubernetes 集群机器重启后磁盘盘符变化