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

顺序执行

命令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 的意思

转载于:https://www.cnblogs.com/qiusuo/p/5570904.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值