shell结构化命令中for命令

19 篇文章 0 订阅

shell脚本编程系列


for var in list
do
     commands
done

读取列表中的值

每次遍历值列表时,for命令会将列表中的下一个值赋值给变量

 #!/bin/bash
 # basic for command

 for test in Alabama Alaska Arizona Arkansas California Colorado
 do
    echo The next state is $test
 done

在这里插入图片描述
在最后一次迭代结束后,变量的值在shell脚本的剩余部分依然有效,会一直保留最后一次迭代时的值,当然可以修改

#!/bin/bash
# testing the for variable after the looping
for test in Alabama Alaska Arizona Arkansas California Colorado
do
   echo "The next state is $test"
done
echo "The last state we visited was $test"
test=Connecticut
echo "Wait, now we're visiting $test"

在这里插入图片描述

读取列表中的复杂值

单词中包含了单引号会导致一团糟,比如this’ll,此时要么使用转义字符来转义单引号,要么使用双引号来定义含有单引号的值

#!/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

在这里插入图片描述
for命令默认使用空格来划分列表中的值,如果某个值包含有空格,则必须将其放到双引号内

 #!/bin/bash
 # an example of how to properly define values

 for test in Nevada "New Hampshire" "New Mexico" "New York"
 do
    echo "Now going to $test"
 done

在这里插入图片描述

从变量中读取值列表

可以将值列表保存到变量中,然后进行拼接操作,再通过for命令读取

#!/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

在这里插入图片描述

从命令中读取值列表

使用命令替换来执行任何能产生输出的命令,然后使用for命令使用该命令的输出

#!/bin/bash
# reading values from a file

file="states"

for state in $(cat $file)
do
   echo "Visit beautiful $state"
done

在这里插入图片描述

更改字段分隔符

默认的字段分隔符由特殊的环境变量IFS(internal field separator 内部字段分隔符)来确定。默认值为空格、制表符、换行符(IFS=$’ \t\n’)
在这里插入图片描述
可以修改IFS的值,如果要制定多个IFS字符,则只需在赋值语句中将这些字符写在一起即可

IFS=: # 将冒号设置为字段分隔符
IFS=$' \n:;"'  # 将换行符、冒号、分号和双引号作为字段分隔符

修改IFS的值,需要注意恢复原来的值,保证安全

IFSOLD=$IFS
IFS=:

结束时替换回去

IFS=$IFSOLD

在这里插入图片描述

使用通配符读取目录

可以使用for命令来自动遍历目录中的文件,但是必须在文件名和路径名中使用通配符,这会强制文件名通配符匹配(file globbing)。文件名通配符是生成与指定通配符匹配的文件名或路径名的过程。

遍历的对象可以是多个文件名通配符

#!/bin/bash
# iterating through multiple directories

for file in /home/rich/.b* /home/rich/badtest
do
   if [ -d "$file" ]
   then
      echo "$file is a directory"
   elif [ -f "$file" ]
   then
      echo "$file is a file"
   else
     echo "$file doesn't exist"
   fi
done

在这里插入图片描述

C语言风格的for语句

for (( variable assignment ; condition ; iteration processs  ))

C语言风格,有些地方与bash shell标准的for命令并不一样

  • 变量赋值可以有空格
  • 迭代条件中的变量不以美元符号开头
  • 迭代过程的算式不使用expr命令格式
#!/bin/bash
# testing the C-style for loop

for (( i=1; i <= 10; i++ ))
do
   echo "The next number is $i"
done

还支持多个变量

#!/bin/bash
# multiple variables

for (( a=1, b=10; a <= 10; a++, b-- ))
do
   echo "$a - $b"
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lang20150928

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值