一:常用格式

格式一

for 变量

do

语句

done

格式二

for 变量 in 列表

do

语句

done

格式三

for ((变量=初始值; 条件判断; 变量变化))

do

语句

done

二:实例

1.数字段形式

for i in {1..10}
do
echo $i
done

  结果:

[root@lb02 ~]# sh .sh

......

2.详细列出(字符且项数不多)

for ma in 1 2 3
do
echo $ma
done

  结果:

[root@lb02 ~]# sh .sh 

3.对存在的文件进行循环

for shname in `ls *.sh`        #此处为反引号,是为了解析其中的命令,反引号也可换成$()。in 后还可以接能获得多个值的命令,也可以接变量和数组。只要
do #返回值为数组形式即可
name=`echo "$shname" | awk -F. '{print $1}'`
echo $name
done

  结果:

[root@lb02 ~]# ls
.sh .sh .sh .sh anaconda-ks.cfg mydir
[root@lb02 ~]# sh .sh

4.查找循环(ls数据量太大的时候也可以用这种方法)

for shname in `find . -type f -name "*.sh"`
do
name=`echo "$shname" | awk -F/ '{print $2}'`
echo $name
done

  结果:

[root@lb02 ~]# ls
.sh .sh .sh .sh .sh anaconda-ks.cfg mydir
[root@lb02 ~]# sh .sh
.sh
.sh
.sh
.sh
.sh

5.语法循环--有点像C语法,但记得双括号

for((i=1;i<10;i++))
do
if((i%3==0))
then
echo $i
continue
fi
done

  结果:

[root@lb02 ~]# sh .sh 

6.seq形式 起始从1开始

for i in `seq 10`
do
if((i%3==0))
then
echo $i
continue
fi
done

  结果:

[root@lb02 ~]# sh .sh 

7.遍历数组

array=(a b c)
for data in ${array[@]}
do
echo ${data}
done

  结果:

[root@lb02 ~]# sh array.sh
a
b
c

8.从其它文件中获取内容

a=$(cat ~/myfile)      #此处也可以用相对路径
for i in $a
do
echo $i
done

  

[root@lb02 ~]# cat myfile
a
b
c

结果:

[root@lb02 ~]# sh .sh
a
b
c

9.求等差数列的和

sum=0
for i in {1..6..2} #也可以用for i in $(seq 1 2 6),seq表示起始数为1,跳跃的步数为2,结束条件值为6。
do
let "sum+=i" #let不可省
done
echo "sum=$sum"

  结果:

[root@lb02 ~]# sh .sh
sum=

10.awk中用for循环

[root@lb02 ~]# awk 'BEGIN{for(i=1; i<=5; i++) print i}'
1
2
3
4
5

11.对每个传参进行操作

for i in "$@"      #$#表示参数的个数,$@表示参数列表而$*则把所有的参数当作一个字符串显示。
do
echo "$i"
done

  结果:

[root@lb02 ~]# sh .sh   

12.类C的for循环计算1~6内所有的奇数之和

sum=0
for(( i = 1; i <= 6; i = i + 2 ))
do
let "sum += i"
done
echo "sum=$sum"

  结果:

[root@lb02 ~]# sh .sh
sum=

13.还可以在命令行这样写

[root@lb02 ~]# for ((i=0; i<3; ++i))
> do
> echo $i
> done
0
1
2
[root@lb02 ~]# for ((i=0; i<3; i++)); do echo $i; done
0
1
2
[root@lb02 ~]# print_args()
> {
> for arg in "$@"
> do
> echo $arg
> done
> }
[root@lb02 ~]# print_args 1 2 3 4
1
2
3
4
[root@lb02 ~]# print_args "wo shi machangwei"
wo shi machangwei
[root@lb02 ~]# print_args wo shi machangwei
wo
shi
machangwei

14.shell实现类似Python键值对来获取值

num=(1 2 3 4)
str=(a b c d)
num_of_num=${#str[@]}
str_num_of()
{
for ((i=0; i<$num_of_num; ++i))
do
if [ "$1" == "${num[i]}" ]; then
echo "${str[i]}"
fi
done
}
echo $(str_num_of 2)
for i in ${num[*]}
do
echo $i $(str_num_of $i)
done

  结果:

[root@lb02 ~]# sh .sh
b
a
b
c
d

15、for中{}可以内容也可以打印出来

[root@lb02 ~]# for i in "{1..5}"; do echo $i; done
{1..5}

16、shell计数器

n=0
for i in a b c
do
n=`echo ${n} + 1|bc`
echo $n
done

  结果:

[root@db01 ~]# sh jishu 
sum=0
for(( i = 1; i <= 4; i++ ))
do
let "sum += i"
echo $i
done
echo "sum=$sum"
echo $i

  结果:

[root@lb02 ~]# sh ss 

4        #内部计数:
sum=10 #求和
5 #在for外层,为最大i加1的结果,相当于再循环一次

17、往数组里添加元素。将for循环的变量变成键值的形式,在最外层也能以键值对来取用。

a=()    #初始化数组
num=0 #计数器初始值
for con in a b c #定义数组元素
do
a[${num}]=$con #将每个变量形成有角标的数组元素
num=`echo ${num} + 1|bc` #计数器
done
echo ${a[@]} #显示数组a的全部元素
echo ${a[1]} #显示数组a的第二个元素

  结果:

[root@db01 ~]# sh  jishu
a b c
b

18、for变量范围中有其他变量。

a=`echo abcde|wc -L`  #此处数字变量也可由ls等得出
for i in `seq 2 $a` #此处不可以用{}的形式
do
echo $i
done

  结果:

[root@db01 ~]# sh jishu 

19、shell实现多线程并发执行

start=`date +%s`
for i in {1..10}
do
{
sleep 1 #实际应为10秒,因为启用多线程,所以1秒结束。但是这样对cpu的消耗比较大。
echo $i;
} & #将执行的命令放在后台执行
done
wait #等待所以子进程结束
stop=`date +%s` echo 总共花费时长:$((${stop}-${start}))

  结果:

[root@db01 ma]# sh .sh 

总共花费时长:

问题:

1. 怎么用for实现死循环(无限循环)?

2. 比较几种写法的不同:(1) for arg in $* (2) for arg in $@ (3) for arg in "$*" (4) for arg in "$@"

3. 怎么跳出for循环?

 

shell语句for循环的更多相关文章

  1. shell编程基础(二): shell脚本语法之分支语句和循环语句

    一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...

  2. 04 shell编程之循环语句

    Shell编程之循环语句 学习目标: 掌握for循环语句编程 掌握while循环语句编程 目录结构: For循环语句 l  读取不同的变量值,以逐个执行同一组命令 l  For语句结构 for 变量名 ...

  3. Shell中的循环语句实例

    1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:" ...

  4. shell编程之循环语句for / while / until

    shell编程之循环语句与函数 一.条件测试 二.循环语句 ① for循环语句结构(遍历) 示例1 示例2 ② while循环语句结构(迭代) 示例1 示例2 ③ until 循环语句结构 示例1 一 ...

  5. shell脚本之循环语句与函数

    shell脚本之循环语句与函数 echo的用法: echo -n #表示不换行输出 echo -e #输出转义字符,将转义后的内容输出到屏幕上 转义字符: \n :换行,被输出的字符从"\n ...

  6. Shell编程之循环语句与echo的用法

    Shell编程之循环语句与echo的用法 目录 Shell编程之循环语句与echo的用法 一.echo用法 1. echo常用选项 2. 常用的转义字符 3. 特殊符号%.#的用法 二.循环语句 1. ...

  7. shell脚本学习-循环

    跟着RUNOOB网站的教程学习的笔记 for循环 与其他编程语言类似,shell支持for循环. for循环一般格式为: for var in item1 item2 ... itemN do com ...

  8. linux shell条件与循环举例

    1. if/else 语句 语法: if condition; then commands;elif condition; then commands;else commands;fi 示例:需求:脚 ...

  9. javascript语句——条件语句、循环语句和跳转语句

    × 目录 [1]条件语句 [2]循环语句 [3]跳转语句 前面的话 默认情况下,javascript解释器依照语句的编写顺序依次执行.而javascript中的很多语句可以改变语句的默认执行顺序.本文 ...

随机推荐

  1. SpringBoot非官方教程 | 第五篇:springboot整合 beatlsql

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot5-beatlsql/ 本文出自方志朋的博客 Be ...

  2. TIDB1 —— TiDB简介

    TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性. TiDB 具备如下核心特点: 1 高度兼容 MySQL  大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB, ...

  3. NSDictionary+JSON - iOS

    日常开发中常用的一个相互转换的方法; 直接创建对应的类,引用如下方法即可实现; 具体 code 如下: 声明: #import <Foundation/Foundation.h> @int ...

  4. 【2018 ICPC焦作网络赛 K】Transport Ship(多重背包二进制优化)

    There are N different kinds of transport ships on the port. The ith kind of ship can carry the weigh ...

  5. IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/app

    web.xml初始化spring容器出错 org.springframework.beans.factory.BeanDefinitionStoreException: IOException par ...

  6. CSRF的原理和防范措施

    a)攻击原理: i.用户C访问正常网站A时进行登录,浏览器保存A的cookie ii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参 ...

  7. lvs集群实现lvs-dr模型和lvs-nat模型

    ipvsadm ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增.删.改,集群服务的RS管理:增.删.改以及查看集群状态. 管 ...

  8. 使用jQuery实现数字逆时针旋转

    要实现数字逆转,最主要是分析我们页面的元素结果,结合选择器充分利用起来! 例如:以下lable中每一个id和值的安排具有一定结构的意义需要用心分析: jQuery代码:

  9. ECSHOP和SHOPEX快递单号查询EMS插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...

  10. 【php】php 生僻知识点认知

    资料引用来源:http://www.runoob.com/php/php-tutorial.html ​ 表单提交中, 变量名中的点和空格被转换成下划线.例如 <input name=" ...