文档章节

我使用过的Linux命令之for - Bash中的For循环

zhailibao
 zhailibao
发布于 2014/07/07 06:12
字数 1018
阅读 97
收藏 13
点赞 0
评论 0

我使用过的Linux命令之for - Bash中的For循环

本文链接:http://codingstandards.iteye.com/blog/778999   (转载请注明出处)

 

用途说明

在shell中用于循环。类似于其他编程语言中的for,但又有些不同。for循环是Bash中最常用的语法结构。

常用格式

格式一

for 变量

do

    语句

done

格式二

for 变量 in 列表

do

    语句

done

格式三

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

do

    语句

done

使用示例

示例一

Bash代码

  1. for s in ac apropos at arp  

  2. do  

  3.      echo $s  

  4. done   

 

 

[root@jfht ~]# for s in ac apropos at arp 
do 
>     echo $s 
done 
ac
apropos
at
arp
[root@jfht ~]#

示例二

Bash代码

  1. for f in *  

  2. do  

  3.     echo $f  

  4. done  

 

 

[root@jfht ~]# for f in * 
do 
>     echo $f 
done 
anaconda-ks.cfg
bak181
hlx
install.log
install.log.syslog
job.sh
job.txt
mbox
mini
setup
temp
vsftpd-2.0.5-16.el5.i386.rpm
vsftpd.conf
work191
[root@jfht ~]#

 

示例三

Bash代码    

  1. ls >ls.txt  

  2. for s in $(cat ls.txt)  

  3. do  

  4.     echo $s  

  5. done  

 

[root@jfht ~]# ls >ls.txt

[root@jfht ~]# for s in $(cat ls.txt) 

do 

>     echo $s 

done 
anaconda-ks.cfg
bak181
hlx
install.log
install.log.syslog
job.sh
job.txt
ls.txt
mbox
mini
setup
temp
vsftpd-2.0.5-16.el5.i386.rpm
vsftpd.conf
work191
[root@jfht ~]#

 

示例四

Bash代码     收藏代码  

  1. print_args()  

  2. {  

  3.     for arg in "$@"  

  4.     do  

  5.         echo $arg  

  6.     done  

  7. }  

  8. print_args 1 2 3 4  

  9. print_args "this is a test"  

  10. <span style="color: #000000;">print_args this is a test</span>  

[root@smsgw root]# print_args() 
{ 
>     for arg in "$@" 
>     do 
>         echo $arg 
>     done 
} 
[root@smsgw root]# print_args 1 2 3 4 
1
2
3
4
[root@smsgw root]# print_args "this is a test" 
this is a test
[root@smsgw root]# print_args this is a test 
this
is
a
test

示例五

Bash代码  

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

  1. do  

  2.     echo $i  

  3. done  

 

[root@smsgw root]# for ((i=0; i<10; ++i)) 
do 
>     echo $i 
done 
0
1
2
3
4
5
6
7
8
9

 

示例六 列表为数组

Bash代码

  1. AREAS=(1901 1902 1903 1904 1905 1906 1907   1908 1909 1910 1911 1912 1913)  

  2. NAMES=(南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁)  

  3. NUM_OF_AREAS=13  

  4. area_name_of()  

  5. {  

  6.     for ((I=0; I<$NUM_OF_AREAS; ++I))  

  7.     do  

  8.         if [ "$1" == "${AREAS[I]}" ]; then  

  9.             echo "${NAMES[I]}"  

  10.         fi  

  11.     done  

  12. }  

  13. echo $(area_name_of 1903)  

  14. for AREA in ${AREAS[*]};  

  15. do  

  16.     echo $AREA $(area_name_of $AREA)  

  17. done  

 

[root@smsgw root]# AREAS=(1901 1902 1903 1904 1905 1906 1907   1908 1909 1910 1911 1912 1913) 
[root@smsgw root]# NAMES=(南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁) 
[root@smsgw root]# NUM_OF_AREAS=13 
[root@smsgw root]# area_name_of() 
{ 
>     for ((I=0; I<$NUM_OF_AREAS; ++I)) 
>     do 
>         if [ "$1" == "${AREAS[I]}" ]; then 
>             echo "${NAMES[I]}" 
>         fi 
>     done 
} 
[root@smsgw root]# echo $(area_name_of 1903) 
徐州
[root@smsgw root]# for AREA in ${AREAS[*]}; 
do 
>     echo $AREA $(area_name_of $AREA) 
done 
1901 南京
1902 无锡
1903 徐州
1904 常州
1905 苏州
1906 南通
1907 连云港
1908 淮安
1909 盐城
1910 扬州
1911 镇江
1912 泰州
1913 宿迁
[root@smsgw root]#

 

示例七 bash version 3.0+

  1. bash --version  

  2. for i in {1..5}  

  3. do  

  4.    echo "Welcome $i times"  

  5. done   

 

[root@smsgw root]# bash --version 
GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.
[root@smsgw root]# for i in {1..5} 
do 
>    echo "Welcome $i times" 
done 
Welcome {1..5} times
[root@smsgw root]#

换个较高版本的Linux。

[root@jfht ~]# bash --version 
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
[root@jfht ~]# for i in {1..5} 
do 
>    echo "Welcome $i times" 
done 
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
[root@jfht ~]#

 

示例八 Bash v4.0+

Bash代码  

echo "Bash version ${BASH_VERSION}..."  

  1. for i in {0..10..2}  

  2.   do  

  3.      echo "Welcome $i times"  

  4.  done  

 

[root@smsgw root]# echo "Bash version ${BASH_VERSION}..."
Bash version 2.05b.0(1)-release...
[root@smsgw root]# for i in {0..10..2}
>   do
>      echo "Welcome $i times"
>  done
Welcome {0..10..2} times
[root@smsgw root]#

换个较高版本的Linux。

[root@jfht ~]# echo "Bash version ${BASH_VERSION}..."
Bash version 3.2.25(1)-release...
[root@jfht ~]# for i in {0..10..2}
>   do
>      echo "Welcome $i times"
>  done
Welcome {0..10..2} times
[root@jfht ~]#

传说Bash4.0可以支持这种语法。

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

 

问题思考

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

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

3. 怎么跳出for循环?

4. for s; do echo $s; done  这个写法的执行结果是什么?

相关资料

【1】小蜗牛技术之家 BASH for 循环小结

【2】相当不错的介绍for语句的英文资料 Bash For Loop Examples

【3】Bash新手指南 第9章 重复性任务

【4】Keep IT Simple and Stupid 在Bash的命令行使用For循环

本文转载自:http://codingstandards.iteye.com/blog/778999

共有 人打赏支持
zhailibao
粉丝 3
博文 36
码字总数 11831
作品 0
东城
系统管理员
如何在 Windows 10 上开启 WSL 之旅

WSL 可以让你访问 Windows 上的 Linux Bash shell。 在 上一篇文章 中,我们讨论过关于 Windows 的子系统 LinuxWindows Subsystem for Linux(WSL)的目标用户。本文,我们将在 Windows 10 的...

作者: Swapnil Bhartiya ⋅ 04/15 ⋅ 0

如何在 Windows 10 上开启 Linux子系统

WSL 可以让你访问 Windows 上的 Linux Bash shell,在 上一篇文章 中,我们讨论过关于 Windows 的子系统 LinuxWindows Subsystem for Linux(WSL)的目标用户,本文,我们将在 Windows 10 的...

问题终结者 ⋅ 04/23 ⋅ 0

2018-6-10Linux进程作业控制与bash循环

一、Linux进程管理及网络工具的使用 1.1 Linux系统作业控制 我们继续接着上一次的话题,继续讲解作业控制,所谓的作业控制就是,由多个功能来完成才能一个作业,所以可以理解为组合的小程序完...

谁猜谁知道 ⋅ 06/11 ⋅ 0

shell,shell脚本结构和执行方法,data命令,shell脚本中的变量

shell是什么 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断、循环等语法 可以自定义函数 shell是系统命令的集合 shell脚本可以实现自动化运维,能大大增加我们的运维...

非此即彼 ⋅ 04/17 ⋅ 0

Bash On Windows安装教程

发布自Kindem的博客,欢迎大家转载,但是要注意注明出处 什么是Bash On Windows Bash On Windows是微软的“Microsoft Love Linux”计划中重要的一环,目的是能让Windows用户能在系统中运行L...

Kindem ⋅ 05/15 ⋅ 0

《Essential Linux Device Drivers》中文版第1章

By 宋宝华 / 本系列文章交流与讨论:xhehref="http://weibo.com/21cnbao" href="http://weibo.com/21cnbao" target="_blank">@宋宝华Barry Linux 具有诱人的魅力,它是一个由全世界不同民族、...

21cnbao ⋅ 2012/09/17 ⋅ 0

Docker应用容器引擎介绍与搭建

附上: 喵了个咪的博客:w-blog.cn 官方Git地址:https://github.com/moby/moby 1. 为什么Docker会火 截止到现在Docker在github上的star数有48570 阿里云,腾讯云,AWS,都推出了自己的Docker平台 ...

喵了_个咪 ⋅ 05/05 ⋅ 0

使用docker制作CentOs+tomcat+jdk镜像

下载CentOs镜像 启动CentOs镜像 通过docker ps命令查看 进入docker容器中操作 进入容器 做准备工作,安装vim,新建目录 通过命令退出并停止容器 备份操作过的镜像 其中: -m 来指定提交的说明...

紫川帝林 ⋅ 04/26 ⋅ 0

不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常

使用SSH终端操作Linux/UNIX时,很多时候需要传一些文件到服务器上,或说从服务器上下载一些文件,这类文件传输动作一般使用FTP即可,但是需要架设FTP Server,每次传输不太方便,还要另外使用...

thinkyoung ⋅ 2014/12/22 ⋅ 0

如何在 Linux 中不安装软件测试一个软件包

出于某种原因,你可能需要在将软件包安装到你的 Linux 系统之前对其进行测试。如果是这样,你很幸运!今天,我将向你展示如何在 Linux 中使用 Nix 包管理器来实现。Nix 包管理器的一个显著特...

10% ⋅ 06/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 昨天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部