Linux Shell:Shell循环语句

Linux Shell:Shell循环语句,第1张

摘要: Linux , Shell

Shell中常用循环有 for , while

for循环只能用于 固定次数 的循环,因此不能无限循环和用于一些在后台守护进程一直运行的程序,语法语句如下

也可以写成一行,用 ; 分隔

取值列表内元素以空格隔开,如果元素带有空格则用引号包裹起来,例子如下

输出如下,可见循环到最后退出循环,引用变量依旧是最后一个取值列表元素

一行的写法

Shell的for循环也可以采用C语言的写法,注意是 双括号 ,用 分号; 间隔

一个简单例子

while循环语句结合条件测试使用,语法如下

举一个例子

在循环中使用条件测试实现复杂的逻辑,例如

也可以使用&&,||一行完成,省去if,fi

Shell的continue,break语句和Python一样,例子如下

break语句下输出4

continue语句下输出4 6 7 8 9 10

常见结合使用的循环体有 序列 , 数组 , 命令行传参 , 文件目录和文件

序列通过 seq 命令或者 {begin..end..step} 符号进行定义:

结合for循环使用案例

在Shell中使用小括号 () 定义数组,数组遍历使用 [@] 符号,防止元素有空格用双引号包起来,,例子如下

命令行传参遍历使用固定符号 $@ ,如果参数中有空格,用双引号括起来,例子如下

文件遍历使用 ls 命令,可以指定目录,以及通配符匹配

一个双重循环实现,注意 expr表达式中乘号要加转移符

(2)将某目录下大小大于阈值的文件移动到另一个文件

遍历循环一个目录,使用awk语法获得文件大小,将100m以上的文件移动到另一个文件夹

(2)指定开始日期和结束日期完成一个跑批任务

指定一个开始时间和结束时间,while从开始日期一直自增到结束日期循环结束,通过 date -d '2021-01-01 1day' +%Y-%m-%d 自增一天

Shell 脚本一直以来不是很入门,很多时候就是用到再查,发现自己有几个重复用比较高的点,还是记录一下,至少查的时候能少费点功夫~~

(1)列表for循环

Shell支持使用略写的计数方式,如{1..10},表示1到10的整数数字;

Shell还支持安规定的步数进行跳跃的方式实现列表for循环,例如计算1~100之内所有奇数的和。

i 按照2的增量增长,一直到增长到100。即实现100内奇数加和。还可以使用seq命令实现按2递增来计算1..100内的所有奇数之和。 for i in $(seq 1 2 100) ,seq 表示起始值为1,增量为2,结束条件值为100。

for循环除了数字列表,还可以生成字符串列表,如列出当前文件夹下的所有文件:

还可以传递命令行参数

$#表示传递的参数的个数;$@表示参数的列表。

(2) 类C风格的for循环

也称之为计次循环。 切记使用的是双括号。

上面的计算100以内奇数的和可以使用类C的for循环实现

通过for循环实现九九乘法表

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总

结,感觉很全面,所以就转过来研究研究,嘿嘿...

1、 for((i=1i<=10i++))do echo $(expr $i \* 4)done

2、在shell中常用的是 for i in $(seq 10)

3、for i in `ls`

4、for i in ${arr[@]}

5、for i in $* do

6、for File in /proc/sys/net/ipv4/conf/*/accept_redirectsdo

7、for i in f1 f2 f3 do

8、for i in *.txt

9、for i in $(ls *.txt)

for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串

数组

============ -_- ==============for num in $(seq 1 100)

10、LIST="rootfs usr data data2"

for d in $LISTdo

用for in语句自动对字符串按空格遍历的特性,对多个目录遍历

11、for i in {1..10}

12、for i in stringchar {1..10}

13、awk 'BEGIN{for(i=1i<=10i++) print i}'

注意:AWK中的for循环写法和C语言一样的

===============================================================

01.#/bin/bash

02.# author: 周海汉

03.# date :2010.3.25

04.# blog.csdn.net/ablo_zhou

05.arr=("a" "b" "c")

06.echo "arr is (${arr[@]})"

07.echo "item in array:"

08.for i in ${arr[@]}

09.do

10. echo "$i"

11.done

12.echo "参数,\$*表示脚本输入的所有参数:"

13.for i in $* do

14.echo $i

15.done

16.echo

17.echo '处理文件 /proc/sys/net/ipv4/conf/*/accept_redirects:'

18.for File in /proc/sys/net/ipv4/conf/*/accept_redirectsdo

19.echo $File

20.done

21.echo "直接指定循环内容"

22.for i in f1 f2 f3 do

23.echo $i

24.done

25.echo

26.echo "C 语法for 循环:"

27.for (( i=0i<10i++))do

28.echo $i

29.done

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

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

shell中for循环用法

shell语法好麻烦的,一个循环都弄了一会 ,找了几个不同的方法来实现输出1-100间可以被3

整除的数

1.用(())

#!/bin/bash

clear

for((i=1i<100i++))

for

do

if((i%3==0))

then

echo $i

continue

fi

done

2.使用`seq 100`

#!/bin/bash

clear

for i in `seq 100`

do

if((i%3==0))

then

echo $i

continue

fi

done

3.使用while

#!/bin/bash

clear

i=1

while(($i<100))

do

if(($i%3==0))

then

echo $i

fi

i=$(($i+1))

done

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

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

在shell用for循环做数字递增的时候发现问题,特列出shell下for循环的几种方法:

1.

for i in `seq 1 1000000`do

echo $i

done

用seq 1 10000000做递增,之前用这种方法的时候没遇到问题,因为之前的i根本就没用到百万

(1000000),因为项目需要我这个数字远大于百万,发现用seq 数值到 1000000时转换为1e+06,根

本无法作为数字进行其他运算,或者将$i有效、正确的取用,遂求其他方法解决,如下

2.

for((i=1i<10000000i++))do

echo $i

done

3.

i=1

while(($i<10000000))do

echo $i

i=`expr $i + 1`

done

因为本方法调用expr故运行速度会比第1,第2种慢不少不过可稍作改进,将i=`expr $i + 1`改

为i=$(($i+1))即可稍作速度的提升,不过具体得看相应shell环境是否支持

4.

for i in {1..10000000do

echo $i

done

其实选用哪种方法具体还是得由相应的shell环境的支持,达到预期的效果,再考虑速度方面的

问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8638058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存