我使用过的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

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

>     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命令系列总目录

linux命令行使用for循环,小弟我使用过的Linux命令之for - Bash中的For循环相关推荐

  1. mac php命令行模式,phpstorm分别在Mac和Windows下启动命令行,并启用ssh

    Mac:在terminal下运行 sudo -i 输入密码  就可以用ssh IP:端口  命令行登录了 DAssist是一个命令行开发辅助,可直接在系统命令行工具中使用,Linux和MacOS等自带 ...

  2. linux中until循环的特点,Bash 中的 until 循环详解

    Bash 中的 until 循环详解 循环是编程语言的基本概念之一.当你想要一遍又一遍地运行一系列命令直到达到某个条件后终止退出时,循环很方便. 在诸如 Bash 之类的脚本语言中,循环对于自动执行重 ...

  3. cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”

    cl: 命令行 error D8021 :无效的数值参数"/Wno-cpp" 和 cl: 命令行 error D8021 :无效的数值参数"/Wno-unused-fun ...

  4. 成功解决 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”

    成功解决 cl: 命令行 error D8021 :无效的数值参数"/Wno-cpp" 和 cl: 命令行 error D8021 :无效的数值参数"/Wno-unuse ...

  5. nps-cli 让你在命令行即可方便的查看、设置和删除 npm-scripts 命令

    npm 提供非常方便的 npm-scripts 功能,让我们在命令行即可执行如 npm start 等预定义的命令.但是定义命令却稍显麻烦,需要打开 package.json 文件,找到 script ...

  6. 1>cl : 命令行 warning D9035: “Gm”选项已否决,并将在将来的版本中移除1>cl : 命令行 error D8016: “/ZI”和“/Gy-”命令行选项不兼容

    VS2017报告错误: 1>cl : 命令行 warning D9035: "Gm"选项已否决,并将在将来的版本中移除         1>cl : 命令行 error ...

  7. 如何用Linux命令行管理网络:11个你必须知道的命令

    本文由 极客范 - jerrylee 翻译自 Chris Hoffman.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 无论你是要下载文件.诊断网络问题.管理网络接口,还是 ...

  8. linux命令行效率,聊聊那些可以提高工作效率的Linux命令

    原标题:聊聊那些可以提高工作效率的Linux命令 Linux下开发这么多年,越来越发现linux的强大与高效率, 记录一些自己在linux下常用的命令供大家分享. df 命令 用于查看 Linux 文 ...

  9. windows使用linux命令行工具,替代Windows系统下cmd的10款命令行工具

    喜欢用Linux系统的或者从事开发编程的朋友可能会经常用到命令行工具,下面会整理一些Windows下命令行工具. 1.powershell 系统自带 powershell 它可以说cmd的升级版.补充 ...

最新文章

  1. python3 numpy array_python 3和numpy数组
  2. Android中的ABI
  3. 《github一天一道算法题》:插入排序
  4. 大学生如何让自己的简历闪闪放光?
  5. 重磅!第三届「星斗奖」榜单正式发布!
  6. GridView RadioButton 解决办法(一) -- 实现单选
  7. 【剑指offer】十九,数组中出现次数超过一半的数字
  8. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)
  9. Visual Studio 起始页中不显示最近使用的项目的解决办法
  10. windows下手动安装composer并配置环境变量
  11. sql server分页_SQL Server中的分页
  12. 每天一算法(一)——用链表实现加减乘运算
  13. android音频杂音问题_三星手机与iOS13 双蓝牙音频输出功能体验报告 「Soomal」
  14. 因为太难而被禁用的17道Google面试题
  15. R语言-解决for modifying Try removing ‘00LOCK’的问题
  16. Logcat 的使用方法
  17. 我的青春恋爱物语果然有问题。完-OP分析
  18. android获取一天的毫秒时间,Android关于获取时间的记录(小结)
  19. DCDC的开关节点SW能打孔吗?
  20. UNiSONSHIFT・ACCENT经典作品推荐 Chu×Chuアイドる和Chu×Chuぱらだいす~Encore Live~介绍(含下载和攻略)

热门文章

  1. openocd for windows
  2. wxpython应用程序对象与顶级窗口_wxPython--学习笔记
  3. iphone怎么长截屏_新iPhone又要为中国定制?除了价格,还有这些惊喜
  4. nginx常见面试题
  5. 无人驾驶图像数据集_自动驾驶数据集
  6. v-viewer图片打不开一直在刷新_WordPress 上传图片时 async-upload.php出现520 Bug的原因及解决方案...
  7. 山东师范大学计算机尹副教授,我校举办首届优秀教案展评工作
  8. linux的tmp文件夹定期会删除么,关于linux tmp下文件自动删除的问题
  9. 基台和种植体如何连接_成年人门牙因某些原因导致缺失该怎么办?如何修复缺失的门牙?...
  10. python 列表 换行_python基础语法学习——参考Python Crash Course