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. 20145236《网络对抗》Exp9 web安全基础实践

    20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  2. Python高级网络编程系列之终极篇---自己实现一个Web框架

    通过前面几个小节的学习,现在我们想要把之前学到的知识点给串联起来,实现一个很小型的Web框架.虽然很小,但是用到的知识点都是比较多的.如Socket编程,装饰器传参在实际项目中如何使用.通过这一节的学 ...

  3. 为什么签名前要加"\x19Ethereum Signed Message:\n"

    在以太坊中,可以找到关于上述破损的解释例子.以太坊有两种消息,交易

  4. node.js如何将远程的文件下载到本地、解压、读取

    其实要解决的问题,很简单,获取远程文件,然后解压到本地读取. 在vscode中通过node.js来实现是比较方便的,相比之前的zip.js,我觉得我还是比较喜欢node.js实现方式. test.js ...

  5. PAT A1016 Phone Bills (25 分)——排序,时序

    A long-distance telephone company charges its customers by the following rules: Making a long-distan ...

  6. iScroll.js插件使用方法

    iScroll.js 用法参考 (share) 分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍 ...

  7. 【Codeforces Round 725】Canada Cup 2016

    模拟Canada Cup 2016,ABC三题,Rank1376 第三题卡住了 Codeforces 725 C 求出两个相同字符的位置,记为x和y. 然后考虑把相同的那个字符放在第一行的什么地方, ...

  8. NOIP2002-2017普及组题解

    虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...

  9. NowCoder110E Pocky游戏 状压DP

    传送门 题意:给出$N$个数和一个长为$M$.所有数在$[1,N]$范围之内的正整数序列$a_i$,求出这$N$个数的一种排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_ ...

  10. Rabbitmq-topic演示

    在direct演示里,我们的日志系统实现了可选择性的接收日志.但仍旧有一些限制:不能基于多种标准进路由.在一个完整的日志系统中,我们可能不仅要根据日志的严重级别来接收日志,可能需要基于日志的来源来进行 ...