《Linux命令行与shell脚本编程大全》 第十二章 学习笔记

时间:2022-08-30 14:31:06

第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶


第十二章:更多的结构化命令

for
基本格式

for var in listdo
commands
done


可以通过下面几种方式指定list列表
1.罗列

for var in A B C D

如果罗列中的字符串中有特殊字符,比如单引号,可以
1)使用转义字符
2)使用双引号

2.从变量读取列表

list="A B C D"list=$list" E"for var in $list
3.从命令中读取值

for var in `cat $file`

注意:这种情况换行也是字段分隔符

for循环结束之后,$var保存着列表中的最后一个值

更改字段分隔符
环境变量IFS:internal field separator,内部字段分隔符

默认情况下,空格、制表符和换行符为字段分隔符
修改:

IFS=$'\n'IFS=:IFS=$'\n:;"'

(上面的$是做什么的)

如果只是想临时修改
IFS.OLD=$IFS
IFS=$'\n'
IFS=$IFS.OLD

用通配符读取目录
可以用for命令遍历目录,但是必须在文件名或者路径名中使用通配符,它会强制shell使用文件扩展匹配(file globbing)
文件扩展匹配是生成匹配指定的通配符的文件名或路径的过程

for file in /home/su1216/test/* /home/su1216/abcdo    if [-d "$file"]    #文件名如果有空格,那么需要将其用引号包起来    then        echo "$file is a directory"    elif [-f "$file"]        echo "$file is a file"    else        echo "$file is not exist"    fidone


C语言风格的for命令
for ((a = 1; a < 10; a++))
注意:
1)给变量赋值可以有空格
2)条件中的变量不以美元符号开头
3)迭代过程中的算式未用expr命令格式
使用多个变量

for (( a = 1, b = 10; a <= 10; a++ ,b-- ))do    echo "$a - $b"done


while命令

while test commanddo    other commandsdone

根据test命令的退出状态码决定是否继续循环

使用多个测试命令
只有最后一个测试命令的退出状态码会被用来决定什么时候退出循环

var1=10while echo $var1      [ $var1 -ge 0 ]do    echo "This is inside the loop"    var1=$[ $var1 - 1 ]done

注意:每个测试条件都在单独的行上,每次迭代,所有测试条件都会被执行!

until命令
与while工作方式相反
基本格式

until test commandsdo    other commandsdone


也可以有多条测试命令,同while

嵌套循环

var1=3until [ $var1 -eq 0 ]do    echo "Outer loop: $var1"    var2=1    while [ $var2 -lt 5 ]    do        var3=`echo "scale=4; $var1 / $var2" | bc`    echo "    Inner loop:$var1 / $var2 = $var3"    var2=$[ $var2 + 1 ]    done    var1=$[ $var1 - 1 ]done


控制循环
break
continue
他们都可以指定跳出/继续的循环层数
break n
continue n
n默认都为1

处理循环的输出
可以在循环的done之后接管输出,比如

for var in A B Cdo    echo "$var"done > out.txt

当然也可以使用管道

for var in A B Cdo    echo "$var"done | sort


 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/