作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,只有由于命令比较单一,只能实现比较简单的功能。如果我们把多个操作都放到一起去,并添加更复杂的逻辑在里面,他就是Shell编程。所以我们主要从以下几个方面讲解Shell编程:
Shell编程-什么是shell
Shell编程-变量
Shell编程-数据类型
Shell编程-逻辑判断
Shell编程-if判断
Shell编程-if和else(本章节)
Shell编程-while循环
Shell编程-for循环
Shell编程-case
Shell编程-break
Shell编程-continue
Shell编程--函数
Shell编程-案例(一)
Shell编程-案例(二)
Shell编程-小结
上一小节的if判断,只考虑了满足条件以后需要做什么,真实环境肯定不可能出现这样的情况的,所以还必须要考虑如果不满足条件以后,需要怎么做。
在Shell脚本中,if
是用于进行条件判断的关键字。它允许根据某个条件的真假来决定执行不同的代码块。if
语句加上失败的基本结构如下:
if [ condition ]; then
# 当条件为真时执行的命令或代码块
else
# 当条件为假时执行的命令或代码块(可选)
fi
if
语句的用法解析:
其实这里比单独的if就是多加了一个失败的分支。
-
条件部分:
-
condition
是一个用于测试真假的表达式或命令。在if
语句中,condition
会被解释为一个命令,其退出状态码(0 表示真,非0 表示假)决定了if
语句执行哪个分支。
-
-
then
和else
部分:-
then
关键字标志着条件为真时执行的命令或代码块的开始。 -
else
部分是可选的,用于指定条件为假时要执行的命令或代码块。
-
-
fi
结束符:-
fi
是if
语句的结束标志,表示条件判断结束。
-
示例:
#!/bin/bash
# 定义一个变量
age=25
# 使用 if 进行条件判断
if [ "$age" -ge 18 ]; then
echo "你是正确的"
else
echo "你是错误的"
fi
在上面的示例中,if [ "$age" -ge 18 ]
是条件部分,如果变量 age
的值大于等于 18,则执行 echo "你是正确的"
;否则执行 echo "你是错误的"
。
多个条件判断:
可以通过逻辑运算符(如 &&
、||
)和嵌套 if
语句来实现复杂的条件逻辑。
#!/bin/bash
# 定义两个变量
score=80
attendance="present"
# 多个条件判断示例
if [ "$score" -ge 70 ] && [ "$attendance" = "present" ]; then
echo "Student passed the exam."
elif [ "$score" -ge 60 ] || [ "$attendance" = "present" ]; then
echo "Student has marginal performance."
else
echo "Student did not pass the exam."
fi
在这个示例中,根据 score
和 attendance
的值,选择不同的输出。
真实案例
还是接着上小节的if的脚本,这个脚本就考虑了所有步骤会出现失败的情况。当然这个脚本只要版本号和依赖环境没问题这个脚本确实可以编译完成nginx的。
#!/bin/bash
# 定义变量
NGINX_VERSION="1.25.1"
DOWNLOAD_URL="http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz"
INSTALL_DIR="/usr/local/nginx"
# 下载 Nginx 源代码
echo "开始下载 Nginx 源代码..."
wget -q $DOWNLOAD_URL
if [ $? -ne 0 ]; then
echo "下载 Nginx 源代码失败!"
exit 1
else
echo "下载 Nginx 源代码成功!"
fi
# 解压源代码
echo "开始解压 Nginx 源代码..."
tar -zxf nginx-${NGINX_VERSION}.tar.gz
if [ $? -ne 0 ]; then
echo "解压 Nginx 源代码失败!"
exit 1
else
echo "解压 Nginx 源代码成功!"
fi
# 进入目录
cd nginx-${NGINX_VERSION}
if [ $? -ne 0 ]; then
echo "进入目录失败!"
exit 1
else
echo "成功进入目录!"
fi
# 配置编译选项
echo "开始配置 Nginx..."
./configure --prefix=$INSTALL_DIR
if [ $? -ne 0 ]; then
echo "配置 Nginx 失败!"
exit 1
else
echo "配置 Nginx 成功!"
fi
# 编译
echo "开始编译 Nginx..."
make
if [ $? -ne 0 ]; then
echo "编译 Nginx 失败!"
exit 1
else
echo "编译 Nginx 成功!"
fi
# 安装
echo "开始安装 Nginx..."
make install
if [ $? -ne 0 ]; then
echo "安装 Nginx 失败!"
exit 1
else
echo "安装 Nginx 成功!"
fi
总结
-
这个脚本如果只要有任何一个步骤失败,则会退出整个脚本。
-
这里数字1,其实就是程序的退出码,理论上只要是非0的自然数都可以,只是个人使用1而已。
-
if的脚本一般很少会单独使用,一般都需要配置else进行配合使用。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。