文档章节

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

zhailibao
 zhailibao
发布于 2014/07/07 06:12
字数 1018
阅读 97
收藏 13

我使用过的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
博文 39
码字总数 11831
作品 0
东城
系统管理员
开始你的bash/shell脚本编程

原文链接🔗 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell...

shellhub
07/14
0
0
bash脚本编程之if分支结构和位置变量的应用以及交互示例

bash脚本编程的结构: (bash脚本编程语言是脚本类语言、解释型语言、过程式编程语言。) 过程式编程语言的结构: 顺序执行结构(默认): 从上到下,自左而右的执行所有的语句(命令) 选择...

花花很漂漂
2017/11/29
0
0
2018-6-10Linux进程作业控制与bash循环

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

谁猜谁知道
06/11
0
0
Linux 学习记录 四(Bash 和 Shell scirpt).

一、什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工作。 ...

jmcui
2017/07/17
0
0
shell入门基础&常见命令及用法

shell shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法 shell脚本 以.sh结尾 shell语法+linux命令 注释: 单行注释 : # 多行注释 : :<...

鱼大大
08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shell特殊符号、cut、sort、uniq、wc、tee、tr、split命令

10月15日任务 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 cut 命令 cut作用:截取字符串 用法如下:cat /etc/passwd |head -2 |cut -d ...

hhpuppy
26分钟前
0
0
Springboot实现filter拦截token验证和跨域

背景 web验证授权合法的一般分为下面几种 1使用session作为验证合法用户访问的验证方式 使用自己实现的token 使用OCA标准 在使用API接口授权验证时,token是自定义的方式实现起来不需要引入其...

funnymin
今天
2
0
linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
14
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部