【RHCA+】if判断

" 目录:RHCA+ -> 5 Shell脚本 -> 10 if判断 "

让脚本根据不同条件自动执行不同的命令

条件判断可使用\[\]测试,也可用test命令

命令序列中可以有一条命令,也可以有多条命令;表示命令的集合

if和then在同一行时,then前一定要加;;例:if 条件; then

条件:

命令的执行结果:` `和$()包含命令,判断的就是执行结果;通过执行结果判断

命令的执行状态:直接输入命令(ls等),判断的就是执行状态(是否执行成功),执行结果被忽略;判断语句都可直接接受执行状态作为判断条件

1、单分支结构

|--------------------|--------------------|
| 语法格式 | 作用 |
| if 条件 then 命令序列 fi | 如果条件判断成功,则执行,否则不执行 |

root@wuzuniao \~# vim 1.sh #判断/root/1目录是否存在,若不存在则创建此目录,否则退出判断语句

#!/bin/bash

DIR="/root/1"

if ! -d $DIR

then

mkdir -p $DIR

fi

root@wuzuniao \~# bash 1.sh #执行脚本不会有输出信息,因为命令序列里面没有输出提示命令

root@wuzuniao \~# ls -ld /root/1 #使用ls命令验证/root/1目录已经成功创建

drwxr-xr-x. 2 root root 6 Feb 20 23:59 /root/1

root@wuzuniao \~# vim 1.sh #判断当前用户uid是否为0,如果为0输出root

#!/bin/bash

if "$(id -u)" -eq "0" ; then

echo "root";

fi

root@wuzuniao \~# bash 1.sh #执行脚本验证成功

root

root@wuzuniao \~#

2、双分支结构

|--------------------------------|-----------------------------|
| 语法格式 | 作用 |
| if 条件 then 命令序列1 else 命令序列2 fi | 如果条件判断成功,则执行命令序列1,否则执行命令序列2 |

root@wuzuniao \~# vim 2.sh #验证主机是否在线

#!/bin/bash

ping -c 3 -i 0.2 -W 3 1 \&\> /dev/null #1表示输入的第一个参数,将结果重定向到/dev/null,避免一直回显;-c指定只ping三次,-i指定包发送间隔,-W指定包等待超时时间

if $? -eq 0 #判断上条语句是否执行成功,成功则$?变量会为0,失败为非零整值

then

echo "Host $1 is On-line."

else

echo "Host $1 is Off-line."

fi

root@wuzuniao \~# bash 2.sh #不输入参数时$1为空,主机不在线

Host is Off-line.

root@wuzuniao \~# bash 2.sh 192.168.1.1 #输入一个在线ip时,可以看到能ping通

Host 192.168.1.1 is On-line.

root@wuzuniao \~#

3、多分支结构

多分支场景下,elif可以有任意个

|---------------------------------------------------------------|-------------------------------------------------------------------------------------|
| 语法格式 | 作用 |
| if 条件1 then 命令序列1 elif 条件2 命令序列2 elif 条件3 命令序列3 else 命令序列4 fi | 如果条件1判断成功,则执行命令序列1; 否则判断条件2,若条件2判断成功,则执行命令序列2; 否则判断条件3,若条件3判断成功,则执行命令序列3; 否则执行命令序列4 |

root@wuzuniao \~# vim 3.sh #输入分数大于等于85分且小于等于100分时,输出Excellent;不满足条件时,继续判断分数是否大于等于70分且小于等于84分,匹配成功时,输出Pass;都匹配失败时,输出Fail

#!/bin/bash

read -p "Enter your score(0-100):" GRADE #把接收到的用户输入信息赋值给后面的指定变量GRADE;read可读取用户输入信息,-p用来指定提示信息

if $GRADE -ge 85 && $GRADE -le 100 ; then

echo "$GRADE is Excellent"

elif $GRADE -ge 70 && $GRADE -le 84 ; then

echo "$GRADE is Pass"

else

echo "$GRADE is Fail"

fi

root@wuzuniao \~# bash 3.sh

Enter your score(0-100):90

90 is Excellent

root@wuzuniao \~# bash 3.sh

Enter your score(0-100):75

75 is Pass

root@wuzuniao \~# bash 3.sh

Enter your score(0-100):2

2 is Fail

root@wuzuniao \~# bash 3.sh

Enter your score(0-100):101 #没匹配到预设判断条件时,会执行最后语句

101 is Fail

root@wuzuniao \~#

相关推荐
大魔王爱学习1 小时前
终端bash&zsh中实现基于前缀的历史命令搜索
linux·bash
2401_858286111 小时前
OS81.【Linux】基于环形队列的多生产者-多消费者模型
linux·运维·服务器·环形队列
行者-全栈开发2 小时前
【Linux内核】CVE-2026-46242:Bad Epoll Linux 内核 epoll UAF 漏洞修复指南(99%可靠root的云安全噩梦)
linux·运维·服务器·cve-2026-46242·linux内核漏洞·use-after-free·云多租户安全
信鸽爱好者3 小时前
一人多台电脑办公模式:windows 电脑A远程桌面操作ubuntu电脑B
linux·运维·ubuntu
木由里予3 小时前
TEE(Trusted Execution Environment)技术详解
java·linux·开发语言·网络·嵌入式硬件·android-studio
开开心心_Every3 小时前
电脑文件搜索软件支持内容和拼音搜索
linux·服务器·人工智能·r语言·pdf·音视频·symfony
国产化创客3 小时前
Kindle --FBInk绘图与zforce2 触摸应用开发
linux·物联网·智能家居·智能硬件
宵时待雨3 小时前
linux笔记归纳13:Socket编程UDP
linux·服务器·笔记·udp
bksczm3 小时前
Linux之应用层层协议认知(TCP协议编程模块化demo) —— 兼论守护进程机制
linux·运维·服务器