目录

for循环

设置for 循环的分隔符

while循环

until循环

SHELL加法运算及I++

有两个命令能帮我们控制循环内部的情况:

  • break命令
  • continue命令

break命令是退出循环的一个简单方法。可以用break命令来退出任意类型的循环,包括for,while和until循环。

for循环

(如果行内有空格,一行一行读文本-for的默认分隔符是空格,所以需要重新定义分割符IFS,否则遇到带空格的行就会出错,见:http://t.csdn.cn/rlVKW)

for:Linux下Shell的for循环语句 - EasonJim - 博客园

for i in {1..10}#10 这个替换成${NUM} 不起作用

语法:for 变量名 in 条件 ; do done;

1.for循环的常见三种用法

(转自:http://t.csdn.cn/08v74)
说在开头:
(1)Ubuntu系统在6.10版本后默认使用dash环境;
(2)而CentOS系统常见默认使用的是bash环境;
(3)二者存在一定的区别,部分for循环方式在dash环境下不兼容;

1.类C语言风格(只适合bash):

#1-100的求和
sum=0
for ((i=1;i<=100;i++))
dosum=$(($sum + $i))
done
echo $sum

2.类Python风格(只适合bash):(注意:{1. .100}中间是两个点,且与in之间保持一个空格)

#1-100的求和
sum=0
for i in {1..100}
dosum=$(($sum + $i))
done
echo $sum

3.seq方式(适合bash、dash):(注意:seq 1 100使用反引号括起来,且与in之间保持一个空格)

#1-100的求和
sum=0
for i in `seq 1 100`
dosum=$(($sum + $i))
done
echo $sum

2.总结

(1)遇到for循环问题先不急,先确定自己的运行环境,如果需要在Ubuntu环境下运行以上三种方法,可以把dash修改为bash环境;

修改方法:Ubuntu和CentOS系统下使用for循环的区别以及bash环境修改

案例二:

列出/etc/sysconfig下所有子目录,并且使用ls -d命令查看。

脚本:

#/bin/bash
cd /etc/sysconfigfor i in `ls /etc/sysconfig`doif [ -d $i ]thenls -d $ifi
done结果:[root@congji ~]# sh syscon.sh
cbq
console
modules
network-scripts

for循环有一个值得注意的地方:

案例3:

我们创建几个文件,用for循环来ls他们。

[root@congji shili]# ll 总用量 0-rw-r--r-- 1 root root 0 1月  16 21:16 1.txt
-rw-r--r-- 1 root root 0 1月  16 21:16 2.txt
-rw-r--r-- 1 root root 0 1月  16 21:17 3 4.txt[root@congji shili]# for i in `ls ./`;do echo $i ;done1.txt
2.txt
3
4.txt

所以写脚本的时候要注意

for i in {2,8,14,22}
doceph daemon osd.${i} perf reset alldone

设置for 循环的分隔符

https://blog.csdn.net/weixin_33011357/article/details/116939172

OLD_IFS="$IFS"   #备份原值
IFS=":"     #修改

for  var  in  $( cat demo.txt )

do

echo var;

done

IFS="$OLD_IFS"    #还原

万一不小心把IFS值设置错了,也可通过如下赋值方式使其恢复到默认值

IFS=$' \t\n'
https://blog.csdn.net/anqixiang/article/details/113360565

for写成一行

for i in `ls ./`;do echo $i ;done

while循环

while使用须知:

1、while 和“:”之间留有空格

2、while中的变量是“局部变量”,外部无法直接读取,见;https://blog.csdn.net/bandaoyu/article/details/120071476

语法 while条件;do...;done

1.利用while循环计算1到100的和:

示例代码1:

#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
dolet sum=sum+$ilet i++
doneecho $sum

示例代码2:利用while循环计算1到100之间所有奇数之和

#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
dolet sum=sum+$ilet i+=2
doneecho $sum

示例代码3:利用while循环计算1到100之间所有偶数之和

#!/bin/bash
i=2
sum=0
while [ $i -le 100 ]
dolet sum=sum+$ilet i+=2
doneecho $sum

2.利用while循环打印**

示例代码:利用while循环打印一个5x5的*

#!/bin/bash
i=1
j=1
while [  $i  -le  5  ]
dowhile [  $j  -le  5  ]doecho -n  "*  "let j++doneecholet  i++let  j=1done

3.使用read结合while循环读取文本文件:

读文件

示例代码1:

#!/bin/bash
file=$1                  #将位置参数1的文件名复制给file
if [ $# -lt 1 ];then      #判断用户是否输入了位置参数echo "Usage:$0 filepath"exit
fi
while read -r line   #从file文件中读取文件内容赋值给line(使用参数r会屏蔽文本中的特殊符号,只做输出不做转译)
doecho $line        #输出文件内容done   <  $file

示例2:按列读取文件内容

#!/bin/bash
file=$1
if [[ $# -lt 1 ]]
thenecho "Usage: $0 please enter you filepath"exit
fi
while read -r  f1 f2 f3    #将文件内容分为三列
doecho "file 1:$f1 ===> file 2:$f2 ===> file 3:$f3"   #按列输出文件内容done < "$file"

用管道

但是 注意 | 管道会起子进程,子进程内的变量无法传到外面,例如:


[liuhao@slave04 ~]$ cat test.sh
#! /bin/shx=1
echo "adasd" | while read line
dox=2
done
echo $x运行结果是
[liuhao@slave04 ~]$ sh test.sh
1
原因原来是因为管道|创建了新的子进程,而子进程是在独立的进程空间(Context)运行了. 需要跟父进程通信的话, 得使用进程间通信机制. 不是简单的变量问题。

4.while循环中的死循环:

示例:利用死循环,让用户做选择,根据客户的选择打印相应结果

(注意:while 和“:”之间留有空格)

#!/bin/bash
#打印菜单
while :
doecho "********************"echo "        menu        "echo "1.tima and date"echo "2.system info"echo "3.uesrs are doing"echo "4.exit"echo "********************"read -p "enter you choice [1-4]:" choice
#根据客户的选择做相应的操作case $choice in1)echo "today is `date +%Y-%m-%d`"echo "time is `date +%H:%M:%S`"read -p "press [enter] key to continue..." Key    #暂停循环,提示客户按enter键继续;;2)uname -rread -p "press [enter] key to continue..." Key;;3)wread -p "press [enter] key to continue..." Key;;4)echo "Bye!"exit 0;;*)echo "error"read -p "press [enter] key to continue..." Key;;esacdone

原文链接:https://blog.csdn.net/wdz306ling/article/details/79602739

break

break在while循环中,我们提到了,这里来写一个脚本,加深印象

如果输入的数字小于等于3,则返回数字,如果输入的数字大于3,则返回aaaa

脚本:

#/bin/bash

read -p "please input a number: " i

if [ $i -lt 3 ]

then

echo $i

break

else

echo aaaa

fi

运行结果:

[root@congji shell]# sh break.sh please input a number: 11[root@congji shell]# sh break.sh please input a number: 5aaaa

continue结束本次循环,而break是跳出循环,要分清楚

[root@congji shell]# cat continue.sh

#/bin/bash

for i in `seq 1 5`

do

echo $i

if [ $i -eq 3 ]

then

continue

fi

echo $i

done

[root@congji shell]# sh continue.sh

[root@congji shell]# cat break.sh

#/bin/bash

for i in `seq 1 5`

do

echo $i

if [ $i == 3 ]

then

break

fi

echo $i

done

[root@congji shell]# sh break.sh

对比两个脚本我们可以发现,break相当于跳出循环,结束。而continue相当于结束本次循环,开始新的循环,

#!/bin/bash
min=1
while true
doecho $minmin=`expr $min + 2`
done
~       

until循环

1、语法结构:条件测试为假时执行循环体

​    until   条件测试​   do​     循环体​    done

转自;Shell脚本(for循环,while循环,break跳出循环,continue结束本次循环)_小新锐_51CTO博客

SHELL递减和递增|i++

加/减变量的最简单方法是使用 + 和 - 运算符。

i=$((i+1))

((i=i+1))

let "i=i+1"

i=$((i-1))

((i=i-1))

let "i=i-1"

此方法允许您将变量递增/递减所需的任何值。

bash 还提供赋值运算符 += 和 -= 。这些运算符用于使用运算符后指定的值递增/递减左操作数的值。

((i+=1))

let "i+=1"

((i-=1))

let "i-=1"

在 ++ 和 -- 分别运营商增量和减量,其操作 1 和返回值。

((i++))

((++i))

let "i++"

let "++i"

((i--))

((--i))

let "i--"

let "--i"

linux shell 递增,如何在 Bash 中对变量递增或者递减 https://blog.csdn.net/weixin_30143813/article/details/116920317

shell中不支持像普通c语言中的i++操作,默认都是字符串操作,但是通过以下几种方式可以进行变量的自增加

1、linux 用let 表示算术表达式 如下:

i=0

let i +=1  或者 let 'i+=1'

2、let也可以用 (())替代,这种用法常见于for循环中

((i++))

for 循环中用法:

((for i=0;i<2;i++))

do

..

done

3、linux 中也可以用expr

i=`expr $i + 1`;

4、还可以用如下模式  
       i=$[$i+1];
       i=$(( $i + 1 ))

---------------------

注意 例  1+2得不到想要的结果,只会输出1+2这个字符串

【Shell】Shell脚本(for循环,while循环,break跳出循环,continue结束本次循环)相关推荐

  1. Linux centosVMware shell编程 for循环、while循环、break跳出循环、continue结束本次循环、exit退出整个脚本...

    一.for循环 语法:for 变量名 in 条件; do -; done 案例1 #!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] ec ...

  2. for循环、while循环、break跳出循环、continue结束本次循环、exit退出脚本

    for循环 •语法:for 变量名 in 条件; do -; done 示例 计算1到100所有数字的和 #!/bin/bash sum=0 for i in `seq 1 100` dosum=$[ ...

  3. python强制退出循环_for循环、while循环、break跳出循环、continue结束本次循环、exit退出本次脚本...

    for循环 格式: for i in `seq 1 3` //表示从1-3,运行3次,i=1,i=2,i=3; do echo $i //每次执行输出 变量i的值 done //for循环结尾 或 f ...

  4. 【蓝桥杯Java_C组·从零开始卷】第三节、while循环do while循环for循环(超重点)break终止循环continue结束本次循环

    开篇主旨--循环四要素 初始值 表达式 循环体 迭代器 所有的循环无论怎么封装,都会遵循着这是个点,就算用hash的方法也算是迭代器的用法. 只要控制好这四个,那么您循环的功底也就满足了,后期递归啥的 ...

  5. Java中return结束循环,Java中break、continue、return在for循环中的使用

    Java中break.continue.return在for循环中的使用 发布时间:2020-09-25 02:01:45 来源:脚本之家 阅读:81 作者:mrr 引言:在使用循环的时候,循环里面带 ...

  6. java for循环break_Java中break、continue、return在for循环中的使用

    这篇文章主要介绍了break.continue.return在for循环中的使用,本文是小编收藏整理的,非常具有参考借鉴价值,需要的朋友可以参考下 引言:在使用循环的时候,循环里面带有break.co ...

  7. linux 循环显示所有的sh.*文件.,linuxSHELL学习之循环嵌套、break、continue

    一.循环嵌套1.在for循环中嵌套另一个for循环 [root@t1 ~]# cat t36.sh #!/bin/bash for (( i=1; i<=3; i++ )) do echo &q ...

  8. 【转】详谈for循环里面的break和continue语句

    https://www.jb51.net/article/119099.htm 转载  更新时间:2017年07月20日 07:53:06   投稿:jingxian   我要评论 下面小编就为大家带 ...

  9. java数组循环动态赋值_04、Java基础语法(循环嵌套、break、continue、方法、方法的重载、数组动态初始化)...

    复习: 流程控制语句 - 顺序结构 - 分支结构 - if-else - switch - 循环结构 - for - while - do...while ctrl + alt + L 格式化代码 & ...

最新文章

  1. [jdk8]Predicate 函数式接口
  2. Java 8 - 收集器Collectors_分区partitioningBy
  3. 云计算,从“资源时代”迈入“功能时代”
  4. 另一种绕过 Android P以上非公开API限制的办法
  5. python 读取excel表数据获取坐标_python读取并定位excel数据坐标系详解
  6. 看到这一切,我忍俊不禁
  7. java 自己的 pid_Java获取自身PID方法搜集
  8. In the beginning, the world was void and without form…
  9. mysql5.6.31安装及配置
  10. 微信小程序云开发教程-云函数入门(2)-接收参数、前端调用
  11. Java IO流常用操作方法总结
  12. FC协议监控卡(FC协议分析仪),FC Monitor
  13. PDF编辑方法,如何裁剪PDF中的一页
  14. Windows XP 上使用pyqt5 + pyinstaller
  15. L1-068 调和平均 (10分)
  16. 从零开始的Linux 阿里云ECS服务器搭建、FileZilla和宝塔
  17. access中的IIf函数
  18. fread函数 和 feof函数
  19. java 开发优势_Java最核心的优势是什么?
  20. 【MATLAB】数据拟合_阶数的确定

热门文章

  1. [MODIS数据处理#2]常用的Arcmap内置工具(一)
  2. 我擦!硬盘文件全被人删了!!
  3. 无人驾驶实战第一课--七月在线
  4. stc15w404as引脚图_怎么把STC15W404AS的EEPROM读写
  5. Java切图或者判断是不是纯色图片
  6. python函数的特性_深入Python函数编程的一些特性
  7. 2021-4-19课程——第5章例题【续】触发器+存储过程和函数
  8. 元胞自动机CA+生命游戏代码
  9. 初探docker部署gitlab
  10. teamviewer 5分钟断线解决办法