Linux脚本练习

通过shell脚本分析部署nginx网络服务

1.接收用户部署的服务名称

2.判断服务是否安装

​ 已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务

​ 没有安装;安装对应的软件包

3.测试

判断服务是否成功运行;

​ 已运行,访问网站

​ 未运行,提示服务未启动,并显示自定义的配置文件内容

4.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我

我的邮箱账号:xxxxxx@163.com

一、整体流程分析

  1. 接收用户输入:脚本首先需要接收用户输入的要部署的服务名称,以此来确定后续针对该服务(这里明确是 nginx)的操作。
  2. 服务安装状态判断及处理
    • 已安装情况 :如果判断出nginx 已经安装,那么需要进行一系列自定义配置操作,包括设定自定义网站配置路径(这里指定为**/www**),并且在该路径下创建共享目录以及网页文件,最后还要重启 nginx 服务。
    • 未安装情况:若发现 nginx 未安装,则要执行相应的安装操作
  3. 服务运行状态测试及处理 :在完成前面的安装或配置操作后,需要测试 nginx 服务是否成功运行。
    • 已运行情况:如果 nginx 服务已运行,告知用户可以通过浏览器访问网站。
    • 未运行情况:若 nginx 服务未运行,除了提示服务未启动外,还需要显示自定义的配置文件内容(这里应该是指之前创建的网页文件内容等),以便用户进一步排查问题。
  4. 邮件通知及脚本发送:当完成上述所有关于 nginx 部署及测试的操作后,如果整个过程没有问题,需要通过邮件告知用户,并且要将脚本代码本身作为附件一并发送给用户。

二、具体步骤分析

1. 接收用户部署的服务名称

通过read命令来提示用户输入要部署的服务名称,并将用户输入的内容存储到一个变量中,以便后续进行判断和处理。

2. 判断服务是否安装及相应处理

已安装情况

  • 确认安装状态 :可以使用which nginx 命令来检查 nginx 是否已经安装。如果该命令执行后输出为空(通过重定向**>/dev/null 2>&1**将标准输出和错误输出都丢弃,若有输出说明找到了可执行文件,即已安装),则说明 nginx 已安装。

which"命令会查找 "nginx" 这个命令在系统中的可执行文件路径

  • 如果系统中已经安装了 Nginx,那么它会返回 Nginx 可执行文件所在的路径

  • 如果系统中没有安装 Nginx,那么它通常不会返回任何内容

  • 标准输出 一般用于输出命令正常执行的结果------用文件描述符1表示

  • 标准错误输出 则用于输出命令执行过程中出现的错误信息------用文件描述符2表示

  • > :用于将标准输出重定向到一个指定的文件或设备。例如 ,echo "Hello" > file.txt会把 "Hello" 这句话的输出从默认的终端显示重定向到file.txt文件中,也就是会创建或覆盖file.txt` 文件并写入 "Hello"

  • >> :与 ">类似,但它是追加模式 ,即如果指定的文件已经存在,不会覆盖原有内容,而是在文件末尾追加新的内容

  • **/dev/null :**数据黑洞,任何写入其中的数据都会被丢弃

  • 自定义配置操作
    • 创建自定义网站配置路径 :使用mkdir -p 命令创建指定的网站配置路径(/www),-p选项确保即使父目录不存在也能创建成功。
    • 创建共享目录和网页文件 :在已创建的网站配置路径下,使用touch命令创建一个网页文件(如index.html),并通过重定向操作(如echo "this is test" >)向该网页文件写入一些测试内容。
    • 重启服务 :使用systemctl restart nginx命令来重启 nginx 服务,以使前面的配置更改生效。

未安装情况

  • 确认安装状态:与已安装情况判断相反
  • 安装对应的软件包
    • 执行安装命令
bash 复制代码
mount /dev/sr0 /mnt
dnf install nginx -y

3. 测试服务是否成功运行及相应处理

已运行情况

  • 使用systemctl is-active nginx命令来检查 nginx 服务是否处于活动状态(即已运行)。如果该命令执行后输出为空(同样通过重定向丢弃输出,若有输出说明服务未运行),则说明 nginx 服务已运行,此时告知用户可通过浏览器访问网站。

未运行情况

  • 若**systemctl is-active nginx**命令执行后输出有内容,说明 nginx 服务未运行。此时除了提示服务未启动外,还需要显示自定义的配置文件内容。

4. 邮件告知及脚本发送

  • 邮件设置
    • 确定邮件主题
    • 编写邮件正文
    • 指定附件 :要将脚本代码本身作为附件发送,需要获取脚本文件的当前路径和文件名((pwd)/(basename $0) ),并将其作为附件指定给邮件。

(pwd)/(basename $0)

  • 构建出了当前脚本文件在文件系统中的完整路径及文件名

  • 例如,如果当前工作目录是 /home/user/scripts 且脚本文件名为 test.sh,那么 (pwd)/(basename $0) 就等于 /home/user/scripts/test.sh
    pwd

  • 获取当前工作目录路径

basename

  • 是一个用于获取路径中的文件名部分的命令
  • 基本用法是basename [路径] ,当给定一个完整的路径时,它会返回该路径中的文件名部分
    • 例如,对于路径 /home/user/Documents/test.sh,执行 basename /home/user/Documents/test.sh 会返回 test.sh
  • 如果只给定一个文件名(没有路径部分),它就直接返回该文件名本身

$0

  • 是一个特殊的变量,在 Shell 脚本中它代表当前正在执行的脚本文件本身的名称(包括扩展名,如果有的话)
    • 例如,如果你的脚本文件名为 test.sh,那么在脚本执行过程中,$0 的值就是 test.sh
  • 发送邮件 :使用mail s-nail命令来发送邮件,需要指定邮件主题、收件人邮箱地址以及附件等相关信息。

5.邮箱部署

bash 复制代码
#挂载
[root@localhost yangjunjie]# mount /dev/sr0 /mnt
#安装邮件服务、
[root@server ~]#dnf   install  s-nail  -y
bash 复制代码
#配置邮件服务
[root@localhost yangjunjie]# vim  /etc/s-nail.rc
bash 复制代码
#测试邮件服务
[root@localhost yangjunjie]# echo 邮件内容:我是作业 | mail -s 主题 xxxxxx@163.com

三、实验操作

bash 复制代码
[root@Server ~]# cat test5.sh 
#!/bin/bash

# 接收用户输入的服务名称
read -p "请输入要部署的服务名称: " service_name

# 判断输入的服务名称是否为nginx
if [ "$service_name" != "nginx" ]; then
    echo "请输入正确的服务名称(nginx)"
    #终止脚本运行
    exit 1
fi
#################################################################
#使用which命令检查nginx是否已经安装
if which nginx &>/dev/null; then
    echo "Nginx已安装"

    # 创建自定义网站配置路径及共享目录和网页文件
    website_path="/www"
    #使用-p选项确保即使父目录不存在也能创建成功
    mkdir -p $website_path
    touch $website_path/index.html
    echo "this is test" > $website_path/index.html

    # 重启nginx服务
    systemctl restart nginx

else
    echo "Nginx未安装,接下来将开始安装nginx"
    #配置挂载点
    mount /dev/sr0 /mnt
    dnf install nginx -y
    
fi

#################################################################
# 测试nginx服务是否成功运行
if systemctl is-active nginx &>/dev/null; then
    echo "Nginx服务已运行,可通过浏览器访问网站"
else
    echo "Nginx服务未启动"
    echo "以下是自定义配置文件内容:"
    cat $website_path/index.html
fi

#################################################################
#mail -s 邮件主题   s-nail 与之相同
#mail -a 添加附件
attachment="$(pwd)/$(basename $0)"

echo "脚本代码------杨俊杰" | s-nail -s  "Linux练习作业" -a "$attachment"  lxx1065372838@163.com
[root@Server ~]# 

运行脚本

邮箱测试(自己的)

网页测试

bash 复制代码
关闭防火墙和SElinux
[root@Server ~]# systemctl stop firewalld
[root@Server ~]# setenforce 0
bash 复制代码
修改配置文件
[root@Server ~]# vim  /etc/nginx/nginx.conf
相关推荐
2401_8576176231 分钟前
药房智控:中药实验管理的自动化
运维·自动化
海绵波波10744 分钟前
集群聊天服务器(13)redis环境安装和发布订阅命令
运维·服务器·redis
白总Server1 小时前
VSCode 常用的快捷键
运维·数据库·ide·vscode·nginx·架构·编辑器
WXDcsdn2 小时前
华为三层交换机禁止VLAN间通讯(两种解决方案)
运维·网络·华为
霍格沃兹测试开发学社测试人社区2 小时前
深入了解测试开发与DevOps体系
运维·软件测试·测试开发·devops
Karoku0662 小时前
【企业级分布式系统】ZooKeeper集群
linux·运维·数据库·分布式·zookeeper·云原生
2401_881278082 小时前
在云服务器搭建 Docker
服务器
llody_552 小时前
ARM64环境部署EFK8.15.3收集K8S集群容器日志
java·运维·elasticsearch·云原生·容器·kubernetes·es
aduzhe3 小时前
在 Ubuntu 上配置防火墙以开放特定端口
linux·运维·ubuntu