玩转Bash脚本:循环结构之for循环

总第7篇

for循环

基本格式

for 变量 in 取值列表
do
    各种操作
done

还有罕见的写法就是都写作一行里:

for 变量 in 取值列表 ; do 各种操作 ;done

取值列表大致可以分成枚举和迭代两类

枚举

普通枚举

取值列表为空格或回车符分割的字符串

for i in ‘apple‘ ‘meat‘ ‘sleep‘ ‘woman‘
do
    echo I like $i
done

在终端执行该脚本for.sh。运行结果

[email protected]:~$ bash for.sh
I like apple
I like meat
I like sleep
I like woman

配合命令替换

命令替换即` `和$( )两种操作符的使用。命令替换配合for循环很常见。

比如我系统的用户叫做jelly,现在我新建了一个叫做guodong的用户。 但是guodong用户缺少很多组权限。我想让guodong拥有jelly所在的全部组。

那么我可以这样:

for var in `groups jelly`
do
    echo $var #打印组名
    gpasswd -a guodong $var
done

请用root运行该脚本,这样就完成了一个给用户guodong批量添加组的任务。

迭代

花括号{
}

  • 数字迭代,比如{1..100}
  • 字母迭代,比如{a..z},{A..Z},{Z..A}
  • ASCII字符迭代,比如{a..A}

来计算一下1加到100的和

#!/bin/bash
ans=0
for i in {1..100}
do
    let ans+=$i
done
echo $ans

结果是5050.

花括号的迭代还可以指定指定增量,格式如下:

{首..尾..增量}

来我们计算一下1到100以内的所有奇数的和:

for i in {1..100..2}
do
    echo $i
done

seq

需要配合命令替换使用。seq命令的格式为:

seq 首数 [增量] 末数

请注意增量的位置在中间,这与前面提到的花括号不同。

来看一个例子(改编自《Shell Scripting Expert Recipes for Linux,Bash,and More》P114)

用脚本来ping一下局域网内的主机:

#!/bin/bash
PREFIX=192.168.1.
for i in `seq 100 110`
do
    echo -n "${PREFIX}$i "
    ping -c5  ${PREFIX}${i} >/dev/null 2>&1
    if [ "$?" -eq 0 ];then
        echo "OK"
    else
        echo "Failed"
    fi
done

当然了for循环也可以写作for i in {100..110}

终端运行的结果

[email protected]:~$ bash ping.sh
192.168.1.100 Failed
192.168.1.101 Failed
192.168.1.102 OK
192.168.1.103 OK
192.168.1.104 OK
192.168.1.105 OK
192.168.1.106 Failed
192.168.1.107 Failed
192.168.1.108 Failed
192.168.1.109 Failed
192.168.1.110 Failed

C风格for循环

Bash还支持C语言风格的for循环,这个很好理解,我们直接来看例子,去计算一下1到100的和。

#!/bin/bash
ans=0
for ((i=1;i<=100;i++))
do
    let ans+=$i
done
echo $ans

注意!!!这里的for循环要有两层括号。

时间: 2024-10-18 06:32:24

玩转Bash脚本:循环结构之for循环的相关文章

玩转Bash脚本:循环结构之while循环

总第8篇 本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html 和其他语言一样Bash的循环结构中也有while语句. 基本结构 while 条件 do 循环体 done 和for语句一样,它的循环体同样是do-done结构.我们可以把while语句再折叠一下 while 条件;do 循环体 done 还能进一步折叠成一行体 while 条件;do 循环体;done Bash语句大都可以写作一行,只不过可读性

玩转Bash脚本:循环结构之while循环(转)

总第8篇 本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html 和其他语言一样Bash的循环结构中也有while语句. 基本结构 while 条件 do 循环体 done 和for语句一样,它的循环体同样是do-done结构.我们可以把while语句再折叠一下 while 条件;do 循环体 done 还能进一步折叠成一行体 while 条件;do 循环体;done Bash语句大都可以写作一行,只不过可读性

玩转Bash脚本:选择结构之case

总第5篇 之前,我们谈到了if. 这次我们来谈还有一种选择结构--case. case与if if用于选择的条件,不是非常多的情况,假设选择的条件太多.一系列的if.elif,.也是醉了. 没错,case在bash中的地位,和switch在C中的地位一样. 可是使用方法可大有不同. 代码块 不论什么语言都有代码块的概念,C语言中的花括号{ },python中的冒号和缩进.bash中的代码块风格不是非常统一.可是在选择结构中是同样的--反语.if结构使用if...fi标识一个代码块的作用域,而ca

玩转Bash脚本:变量基本概念及其初始化

总第2篇 基本概念 命名 注意以下规则: 只能包含字母.数字和下划线,并且不能以数字开头 大小写敏感 不能和系统变量重名 除此以外,如果要导出为全局变量,名称最好要全部大写.这只是一种习惯的约定,并非严格的约束. 类型 几乎所有的编程语言都有变量的概念,Bash当然也不例外.说道变量就少不了说一说类型.但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串.说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算.但其是通过一些运算符,表达式或者命令将字符串

循环结构之for循环

循环结构之for循环(一) 在很多编程语言中都有一种直接.简单的循环,它的一般形式为: 它的执行过程如下: 第一步:执行表达式1,对循环变量做初始化: 第二步:判断表达式2,若其值为真(非0),则执行for循环体中执行代码块,然后向下执行:若其值为假(0),则结束循环: 第三步:执行表达式3: 第四步:执行for循环中执行代码块后执行第二步: 第五步:循环结束,程序继续向下执行. 其执行过程可用下图表示:

bash 脚本之for,while,until循环

过程式编程语言的代码执行顺序: 顺序执行:逐条运行: 选择执行: 代码存在一个分支,条件满足时才执行: 两个或以上的分支,只会执行其中一个满足条件的分支 循环执行: 代码片段(循环体)要执行0,1,或多个来回 选择执行的格式: 1.&&,|| 2.if 语句 3.case语句 if语句格式: 单分支的if语句 if 测试条件 then: 或  if 测试条件 then 代码分支 代码分支 fi   fi 双分支的if语句: if 测试条件:then 条件为真时执行的分支 else 条件为假

Java历程-初学篇 Day07 循环结构2 for循环

一,格式 for(赋值语句//为循环变量赋初值;条件语句//循环结构的循环条件;赋值语句//迭代,修改循环变量的值){ //循环体; } 二,简单举例 for(int i=1;i<=10;i++){ System.out.print("第"+i+"遍循环"); } 三,for循环条件可以少吗? 当然可以,他可以放在for循环内或者外面 甚至可以写个死循环 for(;;){ System.out.println("死循环"); } 四,简单举

第八讲,循环结构,for循环,while循环

程序在一般情况下是按顺序执行的. 编程语言提供了各种控制结构,允许更复杂的执行路径. 循环语句允许我们执行一个语句或语句组多次,下面是在大多数编程语言中的循环语句的一般形式: Python提供了for循环和while循环: 循环类型 描述 while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体. for 循环 重复执行语句 嵌套循环 你可以在while循环体中嵌套for循环 循环控制语句 循环控制语句可以更改语句执行的顺序.Python支持以下循环控制语句: 控制语句 描述

玩转Bash脚本:特殊变量

总第4篇 在前面博文中我讲过了变量基础部分<变量基本概念及其初始化>.我们知道假如我们有初始化一个变量a=hello,那么如果我们想打印它的值,我们需要使用echo $a. 但是除此之外还有很多特殊的变量,可供 $ 使用.本文讲到了$0 # * @ _ ? ! -这几个特殊变量的含义. 脚本的参数 正如同C语言中有main(int argc,char **argv),Java中有main(String[]args)一样,Bash同样能对执行脚本时附加的参数做操作. 引用脚本的参数n 看一个简单