shell中的for循环,shell里的for循环怎么写
shell中的for循环,shell里的for循环怎么写详细介绍
本文目录一览: shell里的for循环怎么写
for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。
其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。
for的语法结构如下:
1
2
3
4
for 变量 in 串行
do
执行命令
done
说明:
行1,讲串行中的字段迭代放入变量中
行2-4,接着将重复执行do和done之间的命令区域,直到串行中每一个字段军处理过为止。
流程图:
用例1
用for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
for k in $( seq 1 10 )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq 1 10 )
do
mkdir bbb${l}
cd /home/kuangl/aaa${k}
done
cd ..
done
说明:
行2,seq 用于产生从某个数到另外一个数之间的所有整数。
行4,在家目录下创建文件夹。
行6,在使用一个for循环创建文件夹
测试结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@test01 kuangl]# ll
total 80
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9
[root@test01 kuangl]# cd aaa1
[root@test01 aaa1]# ll
total 40
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9
1
用例2
列出var目录下各子目录占用磁盘空间的大小。
1
2
3
4
5
6
7
#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
[ -d $k ] && du -sh $k
done
说明:
行4,对/var目录中每一个文件,进行for循环处理。
行6,如果/var下的文件是目录,则使用du -sh计算该目录占用磁盘空间的大小。
测试结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@test01 scripts]# ./var.sh
276M cache
4.0K cvs
84K db
8.0K empty
4.0K ftp
4.0K games
4.0K gdm
21G lib
4.0K local
16K lock
7.4G log
4.0K logs
0 mail
4.0K nis
4.0K opt
4.0K preserve
336K run
3.7G spool
212K tmp
4.1G www
4.0K yp
shell基础(五)for循环及循环终止命令
例一:
效果如图:
开发shell脚本实现服务器临时配置多个IP,并且可以随时撤销配置的所有IP.IP的地址范围为:10.0.2.1~10.0.2.16,其中10.0.2.10不能配置
效果如下:
已知下面字符串是将RANDOM随机数采用md5sum加密后任意取出的连续10位结果,请破解这些字符串对应的md5sum前对的字符串的数字?
"4fe8bf20ed"
效果如图:
例一:
使用循环批量输出数组的元素
例二:通过竖向列举法定义数组元素批量打印
结果如图:
例三:
将命令结果作为数组元素定义并打印
结果如图:
利用for循环打印下面这句话不大于6的单词
I am lodboy teacher welcome to oldboy training class
检测多个网站地址是否正常
要求:
1)使用shell数组的方法实现,检测策略尽量使用模拟用户访问
2)每10秒进行一次全部检测,无法访问的输出报警
3)待检测的地址如下
http://www.baidu.com
http://www.sina.com
http://www.qq.com
http://www.1.com
效果如图:
Linux shell for 循环和双层循环
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循环的几个常用写法分享
1、for ((i=1;i<11;i++));do
echo $i
done
2、for i in {01..10};do
echo $i
done
3、for file in $(find . -type f -name '*.txt');do
echo $file
done
4、for id in 'cat a.txt'
do
echo $id;
done
5、#!/usr/bin/python
sum=0
i=0
for i in range(1,99100,11):
sum=sum+i;
print i ,sum
6、#!/usr/bin/python
for Y in range(2013,2018):
for i in range(1,13):
print "%d%02d01" %(Y,i)
for循环在shell中并不像c语言累加的形式,那具体怎么实现
1、shell中for也可以像c语言使用,例如
sum=0;
for ((i=0;i<100;i++))
do
((sum=sum+i));
done
2、shell中for也有其他的用法
for i in $(seq 1 10)
do
echo $i
done
3、for file in `ls /opt`
do
echo $file
done
4、for id in `cat a.txt`
do
echo $id
done
Linux Shell:Shell循环语句
摘要: 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脚本中使用变量作为for循环范围
我们知道在shell脚本中,可以通过 {x..y} 这样的表达式来表示一个从x到y的数列
这个用法在shell脚本里叫做 Brace Expansion 。
因此我们常利用这个表达式来作为循环的次数,如:
可以得到从1到10的输出结果。
但是如果我们想输出从1到一个变量的结果,这个变量从其他地方获取:
得到的结果却是
放弃使用 {x..y} 这样的表达式:
seq 命令的原理就不说了,这里说说为什么不能在 { } 中使用变量。其实原因写在bash的man手册中:
Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It is strictly textual. Bash does not apply any syntactic interpretation to the context of the expansion or the text between the braces.
大意是说,Bash中会最先展开 { } 中的内容,这个时候 $NUM 还不会被具体的值替代,所以是 i 在循环中读取的是 ‘{1..$NUM}’ 的一个完整的字符串,输出时 $NUM 会被10替代,就有了 '{1..10}' 这样的结果。
关于Bash中的展开 (expansion) 顺序,其实有不少值得注意的地方,一不留神可能就会踩坑,还是老前辈那句:脚本猛于虎。
编写一个shell程序,实现用for循环输出1到20间的奇数
#!/bin/sh
for ((i=1;i<20;i=i+2));
do
echo $i
done
#!/bin/sh
for ((i=1;i<20;i=i+2));
do
echo $i
done
类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
bash / sh / ksh / csh / zsh(Unix/linux 系统)
扩展资料:
传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。
文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理与操作系统之间的交互:等待输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了与操作系统之间通讯的方式。这种通讯可以以交互方式,或者以shell script方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
shell脚本如何用for循环做递减
a="10 9 8 7 6 5 4 3 2 1" --- 可设置其他数字,此处仅举例
for b in ${a}
do
##代码
done
用seq命令可以生成递减序列:
for i in $(seq 10 -1 1 )do echo $idoneseq命令说明:
基本用法
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。
对于第三种模式,当首数大于尾数时,增量需要指定为负数。
shell中for循环嵌套应该怎么写
shell中的for循环一般有两种模式,直接上实例,计算 100内的自然数之合。
//第一种写法
sum=0;for ((i=0;i<=100;++i)); do ((sum=sum+i));done; echo $sum;
//第二种写法
sum=0; for i in `seq 1 100`;do ((sum=i+sum));done; echo $sum