[root@server ~]# [ $(id -u) -eq 0 ] && echo "the user is admin" [root@server ~]$ [ $(id -u) -ne0 ] && echo "the user is not admin" [root@server ~]$ [ $(id -u) -eq0 ] && echo "the user is admin" || echo "the user is not admin"
[root@server ~]# uid=`id -u` [root@server ~]# test $uid -eq 0 && echo this is admin this is admin [root@server ~]# [ $(id -u) -ne 0 ] || echo this is admin this is admin [root@server ~]# [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin this is admin [root@server ~]# su - stu1 [stu1@server ~]$ [ $(id -u) -eq0 ] && echo this is admin || echo this is not admin this is not admin
if [ condition1 ];then command1 结束 elif [ condition2 ];then command2 结束 else command3 fi 注释: 如果条件1满足,执行命令1后结束;如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;如果条件1和条件2都不满足执行命令3结束.
㈣ 层层嵌套结构
箴言4:多次判断,带你走出人生迷雾。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
if [ condition1 ];then command1 if [ condition2 ];then command2 fi else if [ condition3 ];then command3 elif [ condition4 ];then command4 else command5 fi fi 注释: 如果条件1满足,执行命令1;如果条件2也满足执行命令2,如果不满足就只执行命令1结束; 如果条件1不满足,不看条件2;直接看条件3,如果条件3满足执行命令3;如果不满足则看条件4,如果条件4满足执行命令4;否则执行命令5
2. 应用案例
㈠ 判断两台主机是否ping通
需求:判断当前主机是否和远程主机是否ping通
① 思路
使用哪个命令实现 ping -c次数
根据命令的执行结果状态来判断是否通$?
根据逻辑和语法结构来编写脚本(条件判断或者流程控制)
② 落地实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/bin/env bash # 该脚本用于判断当前主机是否和远程指定主机互通
# 交互式定义变量,让用户自己决定ping哪个主机 read -p"请输入你要ping的主机的IP:" ip
# 使用ping程序判断主机是否互通 ping -c1$ip &>/dev/null
if [ $? -eq0 ];then echo "当前主机和远程主机$ip是互通的" else echo "当前主机和远程主机$ip不通的" fi
逻辑运算符 test $? -eq0 && echo "当前主机和远程主机$ip是互通的" || echo "当前主机和远程主机$ip不通的"
㈡ 判断一个进程是否存在
需求:判断web服务器中httpd进程是否存在
① 思路
查看进程的相关命令 ps pgrep
根据命令的返回状态值来判断进程是否存在
根据逻辑用脚本语言实现
② 落地实现
1 2 3 4 5 6 7 8 9 10 11
#!/bin/env bash # 判断一个程序(httpd)的进程是否存在 pgrep httpd &>/dev/null if [ $? -ne0 ];then echo "当前httpd进程不存在" else echo "当前httpd进程存在" fi
或者 test $? -eq0 && echo "当前httpd进程存在" || echo "当前httpd进程不存在"