for 循环两种风格:

c 语言风格

for in 风格

Shell for循环和for int循环详解

c 语言风格 :

这种风格只适用与/bin/bash, /bin/sh不支持这种风格 。

for((exp1; exp2; exp3))
dostatements
done

几点说明:

  • exp1、exp2、exp3 是三个表达式,其中 exp2 是判断条件,for 循环根据 exp2 的结果来决定是否继续下一次循环;
  • statements 是循环体语句,可以有一条,也可以有多条;
  • do 和 done 是 Shell 中的关键字。

它的运行过程为:
1) 先执行 exp1。
2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。
3) 执行完循环体后再执行 exp3。
4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。

上面的步骤中,2) 和 3) 合并在一起算作一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
exp1 仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。exp2 一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。exp3 很多情况下是一个带有自增或自减运算的表达式,以使循环条件逐渐变得“不成立”。

举例如下:

#!/bin/bash # 这里是能是bin/bash bin/sh是不支持c语言风格的sum=0for ((i=1; i<=100; i++))  # 这里是双括号
do((sum += i))
doneecho "The sum is: $sum"

for in 风格:

这种风格/bin/bash和bin/sh都适用

for variable in value_list
dostatements
done

variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字。

in value_list 部分可以省略,省略后的效果相当于 in $@,本文末尾的「value_list 使用特殊变量」将会详细讲解。

每次循环都会从 value_list 中取出一个值赋给变量 variable,然后进入循环体(do 和 done 之间的部分),执行循环体中的 statements。直到取完 value_list 中的所有值,循环就结束了。

#!/bin/bash
sum=0
for n in 1 2 3 4 5 6
doecho $n((sum+=n))
done
echo "The sum is "$sum

运行结果:
1
2
3
4
5
6
The sum is 21

对 value_list 的说明

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

1) 直接给出具体的值

#!/bin/bashfor str in "C语言中文网" "http://c.biancheng.net/" "成立7年了" "日IP数万"
do
echo $str
done

运行结果:
C语言中文网
http://c.biancheng.net/
成立7年了
日IP数万

2) 给出一个取值范围

给出一个取值范围的具体格式为:

{start..end}

start 表示起始值,end 表示终止值;注意中间用两个点号相连,而不是三个点号。根据笔者的实测,这种形式只支持数字和字母。

例如,计算从 1 加到 100 的和:

#!/bin/bashsum=0for n in {1..100}
do
((sum+=n))
doneecho $sum

运行结果:
5050

再如,输出从 A 到 z 之间的所有字符:

#!/bin/bashfor c in {A..z}
do
printf "%c" $c
done

输出结果:
ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz

可以发现,Shell 是根据 ASCII 码表来输出的。

3) 使用命令的执行结果

使用反引号``或者$()都可以取得命令的执行结果,我们在《Shell变量》一节中已经进行了详细讲解,并对比了两者的优缺点。本节我们使用$()这种形式,因为它不容易产生混淆。

例如,计算从 1 到 100 之间所有偶数的和:

#!/bin/bashsum=0for n in $(seq 2 2 100)  # 从2到100,包括100,步长是2
do
((sum+=n))
doneecho $sum

运行结果:
2550

再如,列出当前目录下的所有 Shell 脚本文件:

#!/system/bin/sh
function ergodic(){for file in `ls $1`doif [ -L $1"/"$file ] #排除link文件thenecho >> /data/Thermal.txt #生成空格echo "this is a Link: "$1"/"$file >> /data/Thermal.txtcontinueelif [ $file = "autosuspend_delay_ms" ] #排除不能读的文件thenecho >> /data/Thermal.txtecho "cann't read: "$1"/"$file >> /data/Thermal.txtcontinueelif [ -d $1"/"$file ] #如果是文件夹接着递归thenergodic $1"/"$fileelse #读内容echo >> /data/Thermal.txtecho $1"/"$file >> /data/Thermal.txtcat $1"/"$file >> /data/Thermal.txtfidone
}function generateFile(){echo "----------Thermal Information Start----------" > /data/Thermal.txt
}
INIT_PATH="/sys/devices/virtual/thermal"
generateFile
ergodic $INIT_PATH

ls 是一个 Linux 命令,用来列出当前目录下的所有文件,*.sh表示匹配后缀为.sh的文件,也就是 Shell 脚本文件。

4) 使用 Shell 通配符

Shell 通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件,而不是文本,不了解的读者请猛击《Linux Shell 通配符(glob 模式)》。

#!/bin/bashfor filename in *.sh
do
echo $filename
done

运行结果:
demo.sh
test.sh
abc.sh

5) 使用特殊变量

Shell 中有多个特殊的变量,例如 $#、$*、$@、$?、$$ 等(不了解的读者请猛击《Shell特殊变量》),在 value_list 中就可以使用它们。

#!/bin/bashfunction func(){
for str in $@
do
echo $str
done
}func C++ Java Python C#

运行结果:
C++
Java
Python
C#

其实,我们也可以省略 value_list,省略后的效果和使用$@一样。请看下面的演示:

#!/bin/bashfunction func(){
for str
do
echo $str
done
}func C++ Java Python C#

运行结果:
C++
Java
Python
C#

Linux shell for 循环相关推荐

  1. linux shell for 循环变量,shell for循环总结

    1 shell for循环语法 for 变量 in 列表 do command1 command2 ... commandN done 1.1 读取列表中的值 #!/bin/bash for test ...

  2. linux shell for 循环变量,shell for循环、循环变量值付给其他shell脚本的方法

    本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数. shell for 循环: #!第一种写法 类似c.java for ((i=1; i<=100; i + ...

  3. Linux脚本验证的常见方法,linux shell常用循环与判断语句(for,while,until,if)使用方法...

    shell的循环主要有3种,for,while,until shell的分支判断主要有2种,if,case 一,for循环 #!/bin/bash for file in $(ls /tmp/test ...

  4. linux shell 实现循环输出

    由于工作关系,需要一直监测debug口是否保持在active状态. 从网上查询了下资料,可以通过此方式实现 新建立一个脚本文件,如heart.sh 内容如下: #!/bin/bash i=2 inde ...

  5. linux shell for循环使用命令中读取到的值实例

    #!/bin/bash file="states" for state in `cat $file` do echo "Visit beautiful $state&qu ...

  6. Bash For Loop Examples for Your Linux Shell Scripting--ref

    There are two types of bash for loops available. One using the "in" keyword with list of v ...

  7. linux shell (4) - Loop 循环

    linux shell (4) - Loop 循环 2015.10.18 视频教程 http://www.jikexueyuan.com/course/1529.html 欢迎提问! for 语法结构 ...

  8. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载

    http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ...

  9. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

    原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...

最新文章

  1. LeetCode 456 132 Pattern
  2. Dalvik虚拟机的运行过程分析
  3. IOS添加pch预编译文件
  4. 不使用 + 和 - 运算符计算两整数之和
  5. Machine Learning Mastery 博客文章翻译:XGBoost
  6. 小程序服务商申请入口_商业版微信收款小程序商家申请开通流程指导
  7. 如何将位图格式图片文件(.bmp)生成geotiff格式图片?
  8. 中国能源消费结构(2003-2019年)
  9. NiceScroll接管iview table高度自适应变化
  10. 软考系统集成项目管理工程师 | 计算题公式汇总
  11. 终于稳了!2020年8月程序员工资最新统计
  12. wordpress修复插件_如何修复WordPress中的“缺少临时文件夹”错误
  13. 转:如何做好团队复盘?3大阶段、9个步骤
  14. word文档批量处理表格
  15. 小程序实现6位数密码框
  16. 时间焦虑:为时已晚?
  17. win10安装mmcv和mmcv-full报错
  18. 智慧家庭解决方案-最新全套文件
  19. 华为OD机试ACM输入输出
  20. 使用电销外呼系统的回拨线路真的不会封号吗?

热门文章

  1. 数据可视化(二):犯罪案件分析
  2. 解析Aspx文件(asp.net)
  3. 初中生使用计算机调查问卷,初中生信息技术素养状况调查问卷
  4. 从猫蛇之战再看内核戏CPU
  5. uwp重置/卸载windows10 uwp应用
  6. JavaScript-数据类型转换与表达式运算符
  7. 温柔老爸如何提振小学一年级孩子的成绩
  8. matlab画图的参数,Matlab 画图plot参数 颜色 类型
  9. Sprin_使用注解进行属性注入和整合Mybatis
  10. FISCO BCOS