shell逻辑与和或

shell中对于逻辑与和或的应用,感觉这个例子很有启发
对shell中的与(&&)和或(||)的理解
例如用root验证这个命令
[ $USER == root ] || echo “您不是管理员权限!” && sleep 2 && exit
执行结果:
脚本会休眠2秒后直接退出
下面是转载部分:
======================================================**
如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令

如果第一个命令执行失败,或操作符 (||)才会执行第二个命令

可以分析一下下面的命令的输出:

!/bin/sh

echo “1” && echo “2” || echo “3” && echo “4” || echo “5” || echo “6” && echo “7” && echo “8” || echo “9”

下面是输出:
复制代码

pengdl@debian:~/test/shell$ ./sh5.sh
1
2
4
7
8

复制代码

分析:

echo “1” 执行成功,所以执行echo “2”

echo “2” 执行成功,不执行 echo “3”

既然没有执行echo “3”,可以看做不存在 “ ” || echo “3” ”,echo “2”后紧接“ && echo “4” ”

echo “4” 执行成功,不执行echo “5”

既然没有执行echo “5”,可以看做不存在 “ ” || echo “5” ”,echo “4”后紧接“ || echo “6” ”

echo “4” 执行成功,不执行echo “6”

既然没有执行echo “6”,可以看做不存在 “ ” || echo “6” ”,echo “4”后紧接“ && echo “7” ”

echo “7” 执行成功,执行echo “8”

echo “8” 执行成功,不执行echo “9”

所以最终变成了:

echo “1” && echo “2” && echo “4” && echo “7” && echo “8”

改变一下,比如当前目录没存在目录p,不存在文件7

!/bin/sh

cd p && echo “2” || echo “3” && echo “4” || echo “5” || echo “6” && ls “7” && echo “8” || echo “9”

下面是输出:
复制代码

pengdl@debian:~/test/shell$ ./sh6.sh
./sh6.sh: line 4: cd: p: No such file or directory
3
4
ls: cannot access 7: No such file or directory
9

复制代码

如果想改变执行逻辑,可以加优先操作符()

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

在上面的伪代码中,如果Command_x1执行失败,Command_x2不会执行,但是Command_x3会继续执行, Command_x4会依赖于 Command_x3的退出状态。

(Command_x1 &&Command_x2)

它的执行成功与否: 如果Command_x1执行成功,执行Command_x2 ,如果Command_x2执行成功,那么整个()执行成功,如果Command_x2执行失败,整个()执行失败。如果Command_x2不执行,整个()的执行成功与否取决于Command_x1。

可以分析一下下面的例子:

例一

!/bin/sh

cd p && (echo “1” || echo “2”) || (echo “3” && echo “5”) && (ls 7 || echo “8” || (echo “9” && echo “0”))

下面是输出:

./sh8.sh: line 3: cd: p: No such file or directory
3
5
ls: cannot access 7: No such file or directory
8

例二

!/bin/sh

cd p && (echo “1” || echo “2”) || (echo “3” && cd p) && (ls 7 || echo “8” || (echo “9” && echo “0”))

下面是输出:

./sh7.sh: line 3: cd: p: No such file or directory
3
./sh7.sh: line 3: cd: p: No such file or directory

例三:
复制代码

!/bin/bash

if ls ./iii
then
echo “1”
elif echo “2” && ls ./i
then
echo “3”
else
echo “4”
fi

复制代码

下面是输出:

pengdl@debian:~/test/shell$ ./sh8.sh
ls: cannot access ./iii: No such file or directory
2
ls: cannot access ./i: No such file or directory
4

shell 里面的|| 和&& ,如果是|| 开头将会导致后面逻辑发生混乱。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值