Shell脚本编程之结构化命令

来源:互联网 发布:为知笔记迁移 编辑:程序博客网 时间:2024/05/20 06:24
2016/06/10 

一 if语句
1. if-then语句格式,有两种
第一种:
if command
then 
  commands
fi


第二种:
if command; then
    commands
fi


2.if-then-else语句格式
if command
then 
  commands
else
  commands
fi


3.嵌套if
if command1
then 
  commands
elif command2
then
  more commands
fi


4.test 命令
格式:test condition
if-then语句中声明test命令的方法:
if [ condition ]
then
  commands
fi

注意:你必须在左括号右侧和右括号左侧各加一个空格,否则会报错。
test命令可以判断3类条件:
a 数值比较
b 字符串比较
c 文件比较

4.1 数值比较
images\10-1.png

4.2 字符串比较
images\10-2.png

大于或小于号在比较时必须经过转义

images\10-3.png

4.3 文件比较
images\10-4.png

5. if-then复合条件测试
if-then语句允许你使用布尔逻辑来组合测试:
a [ condition1 ] && [ condition2 ]
b [ condition1 ] || [ condition2 ]

6. if-then的高级特性
a 用于数学表达式的双尖括号
b 用于高级字符串处理 功能的双方括号

双尖括号命令的格式:(( expression ))

双尖括号命令符号:
images\10-5.png

双方括号:[[ expression ]]

7. case命令
格式如下:
case variable in
pattern1 | pattern2) command1;;
pattern3) command2;;
*) default command;;
esac




case命令会将指定的变量同不同的模式进行比较。如果变量和模式是匹配的,那么shell会执行为该模式指定的命令。


二 循环执行一组命令直至达到了某个特定条件,shell循环命令:for, while和until
1 for命令
重复执行一组命令直至达到某个特定条件,比如处理某个目录下的所有文件,系统上的所有用户或是某个文本文件中的所有行。
for命令的基本格式:
for var in list 
do 
    commands
done




for var in list; do


在list参数中,你提供了迭代中要用的一系列值,在每个迭代中,变量var会包含列表中的当前值。第一个迭代会使用列表中的第一个值,第二个迭代使用第二个值,以此类推,直到列表中的所有值都过一遍。$var变量包含着这次迭代对应的当前那个列表中的值。

看个例子:


images\10-6.png
输出的结果并不是我们想要的,如果解决这个问题呢,有两个办法:
a 使用转移字符(反斜线)来将单引号转义
b 使用双引号来定义用到单引号的值
images\10-7.png

1.1 从变量读取列表


images\10-8.png
1.2 更改字段分隔符
环境变量IFS称为内部字段分隔符,默认情况下,bash shell会将空格,制表符,换行符当作字段分割符。

1.3 用通配符读取目录
这个特性在处理目录中的文件而你不知道所有的文件名时非常有用
images\10-9.png

注意,在这个例子中,我们和if语句里的测试处理得有些不同:
if [ -d "$file" ]
在Linux中,目录名和文件名中包含空格当然是合法的,要容纳这种值,你应该用双引号将$file圈起来 ,如果不那么做,遇到含有空格的目录名或文件名时会有错误产生。



0 0
原创粉丝点击