欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Linux命令行与shell脚本编程大全》 第十二章 博客分类: Linux命令行与shell脚本编程大全 forwhileuntilbreakcontinue 

程序员文章站 2024-03-14 23:56:53
...

 

第一部分: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 list
do
    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/abc
do
    if [-d "$file"]
    #文件名如果有空格,那么需要将其用引号包起来
    then
        echo "$file is a directory"
    elif [-f "$file"]
        echo "$file is a file"
    else
        echo "$file is not exist"
    fi
done


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 command
do
    other commands
done

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

使用多个测试命令
每个测试条件都在单独的行上,只有最后一个测试命令的退出状态码会被用来决定什么时候退出循环

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

注意:每次迭代,所有测试条件都会被执行!


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

until test commands
do
    other commands
done

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

嵌套循环

var1=3
until [ $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 C
do
    echo "$var"
done > out.txt

当然也可以使用管道

for var in A B C
do
    echo "$var"
done | sort

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

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

推荐阅读