流程控制语句 - 顺序、选择

顺序执行

命令1 && 命令2:命令1执行成功,命令2才会执行

$ mv /apps/bin /apps/dev/bin && rm -r /apps/bin
#如果移动成功,参会删除。否则,删除语句不会执行

命令1 || 命令2:命令1执行失败,命令2才会执行

$ comet month_end.txt || exit
如果脚本comet执行成功,就退出

(命令1;命令2;. . .)

括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

{ 命令1;命令2;...;命令n;}

代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。

选择语句

1. 基本语句

if condition_statament
then
     statament
fi

其中condition_statament执行后的状态是判断的依据,返回0表示执行成功,否则表示执行失败。通常由test语句的返回值给出。当然也可使用其他命令语句,执行成功则进入if内,否则跳过。(注意,符号“[”在bash中就是test命令,新版本中才强制使用“]”做结束)

# 最原始的使用test,后改用 []
if test 1 = 1
then
    echo 原始的
fi

# 或者可以通过;分割语句在一行执行【if [ 1 = $num ];thenif [ 1 = $num ]
then
    echo num\'s value is 1
elif [ 2 = $num ]
then   
    echo num\'s value is 2
else
    echo false
fi

也可以在condition_statement中使用其他语句,比如这里ls命令执行失败,就跳过if语句了。

if ls a;then
     echo echo
fi

 2. 逻辑运算

逻辑运算有两种方式:
a) test命令内部的逻辑运算,其中[]之间就相当于test命令的简写
    使用-a、-o,分别表示and和or。
    使用!,表示not

b) test命令之间的逻辑运算
    使用&&、||,分别表示and和or。

注意“[[”是bash中的关键字,而不是test的命令。

# 用||、&&
if [[ 1 = 1 || 1 = 2 ]]
then
    echo 或1
fi

if [ 1 = 1 ] || [ 1 = 2 ]
then
    echo 或2
fi
# 用-a、-o
if [ 1 = 1 -o 2 = 2 ]
then
    echofi

# 非用!
if [ ! 1 = 2 ]
then
    echofi

 3. 分支语句

分支语句使用如下:

read ff
case $ff in
1)
    echo select 1
    ;;
yes|y)
    echo select yes
    ;;
123*123)
    echo select 123*123
    ;;
*)
    echo select any
    ;;
esac

 4. 常用的判断条件(test命令中使用的)

关系运算

运算符号 代表意义
= 等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
!= 不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
< 小于 应用于:整型比较 在[] 中,不能使用 表示字符串
> 大于 应用于:整型比较 在[] 中,不能使用 表示字符串
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符串
-n 非空字符串

文件与文件夹判断

逻辑卷标 表示意思
1 关于文件与文件夹的检测逻辑卷标!
-f 常用!检测『文件』是否存在 eg: if [ -f filename ]
-d 常用!检测『文件夹』是否存在
-b 检测是否为一个『 block 文件』
-c 检测是否为一个『 character 文件』
-S 检测是否为一个『 socket 标签文件』
-L 检测是否为一个『 symbolic link 的文件』
-e 检测『某个东西』是否存在!
2. 关于程序的逻辑卷标!
-G 检测是否由 GID 所执行的程序所拥有
-O 检测是否由 UID 所执行的程序所拥有
-p 检测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)
3. 关于文件的属性检测!
-r 检测是否为可读的属性
-w 检测是否为可以写入的属性
-x 检测是否为可执行的属性
-s 检测是否为『非空白文件』
-u 检测是否具有『 SUID 』的属性
-g 检测是否具有『 SGID 』的属性
-k 检测是否具有『 sticky bit 』的属性
4. 两个文件之间的判断与比较 ;例如[ test file1 -nt file2 ]
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一个文件( link 之类的文件)
5. 逻辑的『和(and)』『或(or)』
&& 逻辑的 AND 的意思
|| 逻辑的 OR 的意思

posted on 2016-06-08 18:20  峰入云  阅读(170)  评论(0编辑  收藏  举报

导航