`

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

阅读更多

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

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

 

用途说明

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

常用格式

格式一

for 变量

do

    语句

done

格式二

for 变量 in 列表

do

    语句

done

格式三

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

do

    语句

done

使用示例

示例一

for s in ac apropos at arp
do
     echo $s
done 

 

 

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

示例二

for f in *
do
    echo $f
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 ~]#

 

示例三

ls >ls.txt
for s in $(cat ls.txt)
do
    echo $s
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 ~]#

 

示例四

print_args()
{
    for arg in "$@"
    do
        echo $arg
    done
}
print_args 1 2 3 4
print_args "this is a test"
print_args this is a test



[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

示例五

for ((i=0; i<10; ++i))
do
    echo $i
done

 

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

 

示例六 列表为数组

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

bash --version
for i in {1..5}
do
   echo "Welcome $i times"
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+

echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 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循环

 

返回 我使用过的Linux命令系列总目录

 

2
0
分享到:
评论

相关推荐

    Linux高级bash编程

    使用命令替换来产生for循环的[list] 10-7. 对于二进制文件的一个grep替换 10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名...

    【shell脚本】shell脚本之条件判断if、for与while循环(shell脚本基础学习二)

    for循环: for 变量名称 in 值1 值2 值3...... do 执行指令 done ------------------------- 1, 循环次数,和值有关 2, 循环时的变量,也和值有关 ------------------------- #!/bin/bash for i in {1..10} 多个值的...

    对Linux下shell编程之for循环的实例讲解

    linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一、常用for循环结构 #语法一 for 变量 in 值1 值2 值3.. do 程序块儿 done # #语法二 for 变量 `命令` do 程序块儿 done...

    bash-loops:各种 BASH 循环的基准

    然后,我想知道:我可以在 BASH 中运行命令n次的最快方法是什么? 经过一些快速的谷歌搜索,我对结果并不满意。 所以,我决定亲自测试一下。我的系统Linux 3.18.6-1-ARCH x86_64 GNU/Linux bash 4.3.33(1)-release ...

    linux培训初中高级和资深课程视频.zip

    目录网盘文件永久链接 01_01_面授班开场 01_02_面授班开场 01_03_操作系统基础 ...06_03_bash脚本编程之五 字符串测试及for循环 07_01_vim编辑器详解 07_02_bash脚本编程之六 使用脚本选项及组合条件测试.......

    RED HAT LINUX 6大全

    4.8 使用Red Hat的wmconfig命令 54 4.9 个人化的X资源文件 54 4.10 使用xdm 55 4.11 XFree86疑难解答 57 4.12 小结 57 第5章 窗口管理器 58 5.1 GNOME X环境 59 5.1.1 什么是GNOME 59 5.1.2 GNOME 安装组件 59 5.1.3...

    Shell脚本学习笔记

    第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 ...

    Linux Shell 脚本编程入门教程

    深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K ...

    bash浅入

    目录shell脚本规范bash字符变量运算符算数运算符关系运算符逻辑运算符字符串运算符文件比较运算符流程控制if elsefor 循环while 语句until 循环case 语句break 命令continue 命令函数参考 Bash(GNU Bourne-Again ...

    mykubernetes#linux#批量修改文件名1

    for循环结合sed替换ls结合awk,输出交给bash执行rename命令改名for循环加变量部分截取不使用echo也可以实现根据文件批量修改文件名提供的文档

    Linux Shell——循环与结构化命令

    for循环 for variable in (list) do command done #!/bin/bash for variable in {1..5} do echo Hello,Welcome $variable times done #!/bin/bash #步长为2 for variable in {1..5..2} do echo Hello,Welcome $...

    跟老男孩学Linux运维:Shell编程实战

    / 1819.5 case条件语句的Linux系统脚本范例 / 1879.6 本章小结 / 191第10章 while循环和until循环的应用实践 / 19210.1 当型和直到型循环语法 / 19210.2 当型和直到型循环的基本范例 / 194第11章 for和select...

    ARM_Linux启动分析.pdf

    也就是说,我们的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux这样的顺序组织,并存放于始于引导分区的首扇区的连续磁盘扇区之中。 bootsect.S完成加载动作后,就直接跳转到0x90200,这里正是setup....

    Linux用脚本实现“时分秒“倒计时功能

    1.怎样实现“时分秒“倒计时 在Linux下,脚本的完成相对于C语言来说稍微随意一点,可以按照字的...ps:使用shell脚本for循环实现一天倒计时 #!/bin/bash # 此脚本用于实现一天倒计时 # 2017-06-01 # 房佳亮 clear for

    Shell脚本break和continue命令简明教程

    在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。 break命令 break命令允许跳出所有循环(终止执行后面的所有循环)。 下面的例子中,脚本进入死...

    Linux Shell脚本面试25问集合

    Q:1 Shell脚本是什么、它是必需...答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示: # chsh &lt;username&gt; -s # chsh linuxtechi -s /bin/sh

    线性规划的matlab代码-software_engineering:这是与深度学习相关的软件工程的仓库

    线性规划的matlab代码 software_engineering This ...循环:while/for in/xargs/find -exec 1.1.5 监测系统:w/bmon/iostat/iotop 1.1.6 misc:ln/export/实时设置变量/source/chmod/chown/#!/sshpass/

    BASH 学习笔记小结

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序...

Global site tag (gtag.js) - Google Analytics