Linux shell(3)-循环

1. for 命令

  • for 命令用于循环,格式如下:
for var in list
do
 commands
done 
  • 也可以将do语句和for语句放在同一行,但必须用分号将其同列表中的值分 开:for var in list; do

1.1 读取列表中的值

  • for命令最基本的用法就是遍历for命令自身所定义的一系列值。案例如下:
$ cat test1
#!/bin/bash
# basic for command
for test in Alabama Alaska Arizona Arkansas California Colorado
do
 echo The next state is $test
done

$ ./test1
The next state is Alabama
The next state is Alaska
The next state is Arizona
The next state is Arkansas
The next state is California
The next state is Colorado
$

1.2 读取列表中复杂值

  • 列表中可能有像单引号等不好读取的值,需要我们对此进行转置
  • 使用转义字符(反斜线)来将单引号转义;

  • 使用双引号来定义用到单引号的值。

  • 如果在单独的数据值中有空格,就必须用双引号将这些值圈起来。
  • 案例如下:
$ cat test2
#!/bin/bash
# another example of how not to use the for command
for test in I don\'t know if "this'll" work
do
 echo "word:$test"
done

$ ./test2
word:I
word:don't
word:know
word:if
word:this'll
word:work
$ 

1.3 从变量读取列表

  • 通常shell脚本遇到的情况是,你将一系列值都集中存储在了一个变量中,然后需要遍历变量
    中的整个列表
  • 案例如下:
$ cat test4
#!/bin/bash
# using a variable to hold the list
list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticut"
for state in $list
do
echo "Have you ever visited $state?"
done

$ ./test4
Have you ever visited Alabama?
Have you ever visited Alaska?
Have you ever visited Arizona?
Have you ever visited Arkansas?
Have you ever visited Colorado?
Have you ever visited Connecticut?

1.4 从命令读取值

  • 案例如下:
$ cat test5
#!/bin/bash
# reading values from a file
file="states"
for state in $(cat $file)
do
echo "Visit beautiful $state"
done

$ cat states
Alabama
Alaska
Arizona
Arkansas
Colorado
Connecticut
Delaware
Florida
Georgia

$ ./test5
Visit beautiful Alabama
Visit beautiful Alaska
Visit beautiful Arizona
Visit beautiful Arkansas
Visit beautiful Colorado
Visit beautiful Connecticut
Visit beautiful Delaware
Visit beautiful Florida
Visit beautiful Georgia

1.5 更改字段分隔符

  • 变量IFS,叫作内部字段分隔符(internal field separator)。

  • IFS环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字符当作字段分隔符:

    • 空格
    • 制表符
    • 换行符
  • 如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数
    据字段的开始

  • 如果你列出了一个名字中有空格的州,for命令仍然会将每个单词当作单独的值。修改IFS的值,使其只能识别换行符

IFS=$'\n'
  • 将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表符。对前一个脚本使用
    这种方法,将获得如下输出。
$ cat test5b
#!/bin/bash
#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值