Linux shell之for in的使用及说明
作者:wzj_110
这篇文章主要介绍了Linux shell之for in的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
一、语法
for 变量名 in 列表 do 程序段(command) done
注意1:是变量名而不是$变量!
注意2:列表可以做文章!
二、应用
第一类:数字性循环-->seq在in后面的应用
#!/bin/bash #也是产生等差数列-->默认是1 for i in $(seq 1 10) #产生的是一个字符串,默认IFS是以空格隔开! do echo $(expr $i \* 3 + 1); #主要是复习:expr乘法的特殊用法!-->空格隔开 done
补充:产生[1,10]的自然数-->{}在in后面的应用
total=0 #全局变量 for i in {1..100} #".."表示连续,默认也是IFS为空格隔开 do ((total+=i)) done echo -e "total is:${total}" #多行注释 <<COMMENR for i in mysql_{0,1,4,12}sql #多个文件 do echo $i samtools view -c $i done COMMENT
第二类:字符性循环
最原始的
#!/bin/bash #使用列表for循环显示周一到周日对应的英文-->学习日期的英文 for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday do echo "$day" done
变量的类型
#!/bin/bash list="Linux Java C++ Python" for i in $list do echo -e "Language is ${i}" done
cat在in后面的应用-->逐行读取文件的内容(默认是IFS),所以不是逐行打印!
#!/bin/bash for i in $(cat 日志颜色.sh) #注意:pwd当前目录下的文件 do echo $i done
思考:如果想逐行原样输出!
#!/bin/bash # reading content from a file file="日志文件.sh" #将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表,使其只能识别换行符! IFS=$'\n' for std in $(cat $file) do echo "$std" done
说明:IFS的一些说明!
- bash shell会将下列字符当作字段分隔符:空格、制表符、换行符
- 说明:如果在shell在数据中看到这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始!
参考的最佳安全实践:在改变IFS之前保存原来的IFS值,之后再恢复它。
保证了:在脚本的后续操作中使用的是IFS的默认值
实现:
IFS.OLD=$IFS #默认的IFS的数值-->也是环境变量! IFS=$'\n' #自定义的IFS数值 <在代码中使用新的IFS值> #待使用自定义IFS的部分! IFS=$IFS.OLD #恢复默认的IFS
第三类:路径查找
ls在in后面的命令是-->读取当前pwd下的文件(广义上)!
#!/bin/bash for i in `ls`; #ls可以结合统配符应用! do echo $i is file name\! ; #注意:\的应用! done
用通配符读取目录(无命令)
for file in ~/*; #一级目录下的内容-->并不递归显示! do echo $file is file path \! ; #${file}代表的是文件的全路径 done
#!/bin/bash #回忆1:统计脚本参数的个数 echo "argument number are $#"! #回忆2:参数的内容-->此处可以换成$@来测试! echo "the input is $*" #循环执行 for argument in "$*"; do echo "$argument " done
IFS:内部字段分隔符
需求如下:
#遍历一个文件中用冒号分隔的值:-->特殊文件-->/etc/passwd文件等! IFS=: #如果要指定多个IFS字符,只要将它们在赋值行串起来就行。 IFS=$'\n':;"
总结
#(1)从变量读取列表 # 将一系列的值都集中存储在一个变量中,然后需要遍历变量中的整个列表 #(2)从命令读取值 #有两种方式可以将命令输出赋值给变量: # (1)反引号字符(`) # (2)$()格式
补充:在列表构成上分多种情景,如数字列表、字符串列表、命令列表、脚本传参列表等!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。