Shell脚本编程之结构化命令

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 数值比较

Shell脚本编程之结构化命令_第1张图片
4.2 字符串比较

Shell脚本编程之结构化命令_第2张图片
大于或小于号在比较时必须经过转义



4.3 文件比较

Shell脚本编程之结构化命令_第3张图片
5. if-then复合条件测试
if-then语句允许你使用布尔逻辑来组合测试:
a [ condition1 ] && [ condition2 ]
b [ condition1 ] || [ condition2 ]

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

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

双尖括号命令符号:

Shell脚本编程之结构化命令_第4张图片
双方括号:[[ 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变量包含着这次迭代对应的当前那个列表中的值。

看个例子:

Shell脚本编程之结构化命令_第5张图片


输出的结果并不是我们想要的,如果解决这个问题呢,有两个办法:
a 使用转移字符(反斜线)来将单引号转义
b 使用双引号来定义用到单引号的值
Shell脚本编程之结构化命令_第6张图片

1.1 从变量读取列表

Shell脚本编程之结构化命令_第7张图片


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

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

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



你可能感兴趣的:(环境配置)