ty9919 发表于 2018-8-29 13:37:09

shell中命令间的逻辑关系

  在shell中命令执行成功返回值为0,不成功返回值为非0
  逻辑与:
  shell中0为真,非0为假
  第一个条件为真时,第二条件必须判断;
  第一个条件为假时,第二条件不再判断,最终结果为假;
  当第一个命令执行成功继续执行第二个命令,最终结果由第二个命令执行结果决定。
  当第一个命令执行失败第二个命令不再执行,最终结果为失败。
  理解为乘法运算(0为假1为真)
  1*1=1      1*0=0          0*1=0      0*0=0
  例:
  1、user1存在,前一条命令执行成功,第二条命令执行成功,最终结果为成功(1*1=1)
# id user1  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# echo $?
  
0
  
# id user1 &> /dev/null && echo Hello user1
  
Hello user1
  
# echo $?
  
0
  2、user1不存在,前一条命令执行失败,后一条命令不再执行,最终结果为失败(0*?=0)
# id user1  
id: user1: No such user
  
# echo $?
  
1
  
# id user1 &>/dev/null && echo Hello user1
  
# echo $?
  
1
  3、user1 存在 user2不存在 前一条命令执行成功,后一条命令执行失败,命令最终执行失败(1*0=0)
# id user1  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# echo $?
  
0
  
# id user2
  
id: user2: No such user
  
# echo $?
  
1
  
# id user1 &>/dev/null && id user2
  
id: user2: No such user
  
# echo $?
  
1
  逻辑或:
  shell中0为真,非0为假
  第一个条件为真时,第二条件不再判断,最终结果为真;
  第一个条件为假时,第二条件必须判断。
  当第一个命令执行成功第二个命令不再执行,最终结果为成功。
  当第一个命令执行失败继续执行第二个命令,最终结果由第二个命令的执行结果决定。
  理解为加法运算(0为假1为真)
  0+0=0   1+0=1    1+1=1    0+1=1
  1、user1 存在 前一条命令成功 后一条不再执行最终结果为成功(1+?=1)
# id user1  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# echo $?
  
0
  
# id user1 &>/dev/null || useradd user1
  
# echo $?
  
0
  2、user1 不存在 前一条命令执行失败,执行第二条命令成功最终结果成功(0+1=1)
# id user1  
id: user1: No such user
  
# echo $?
  
1
  
# id user1 &>/dev/null || useradd user1
  
# echo $?
  
0
  
# id user1
  
uid=501(user1) gid=501(user1) groups=501(user1)
  3、user1不存在前一条命令执行失败;user2不存在后一条命令执行失败;最终结果失败(0+0=0)
# id user1  
id: user1: No such user
  
# echo $?
  
1
  
# id user2
  
id: user2: No such user
  
# echo $?
  
1
  
# id user1 &>/dev/null || id user2 &>/dev/null
  
# echo $?
  
1
  执行结果可以使用   !    来取反使真变假、假变真
# id user1  
id: user1: No such user
  
# echo $?
  
1
  
# ! id user1
  
id: user1: No such user
  
# echo $?
  
0
  

  
# id user1
  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# echo $?
  
0
  
# ! id user1
  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# echo $?
  
1
  
# ! id user1 &>/dev/null && useradd user1
  
# echo $?
  
1
  复合实例
  如果user1不存在添加user1,如果存在输出Hello user1
# id user1  
id: user1: No such user
  
# id user1 &>/dev/null && echo "Hello user1" || useradd user1
  
# echo $?
  
0
  
# id user1
  
uid=501(user1) gid=501(user1) groups=501(user1)
  
# id user1 &>/dev/null && echo "Hello user1" || useradd user1
  
Hello user1


页: [1]
查看完整版本: shell中命令间的逻辑关系