当前位置: 首页 > article >正文

Linux Shell 脚本题目集

1、执行 ping 命令对指定主机进行测试,以确定该主机是否处于存活状态并输出相应结果。

#!/bin/bash

read -p "请输入主机号:" pc      # 读取用户输入的主机号

if [ -z "$pc" ];then             # 检查用户输入是否为空
  echo "主机号不能为空!"
  exit 1
fi

# ping命令检查主机是否存活(发送三个ICMP请求,超时时间为3秒)
ping -c 3 -w 3 "$pc" > /dev/null

# 检查ping命令的返回值
if [ $? -eq 0 ];then 
  echo "$pc 存活"
else
  echo "$pc 不存在或不在存活状态"
fi

测试示例:

2、验证系统中特定用户是否存在。

#!/bin/bash

read -p "请输入用户名或者用户ID号:" username  # 读取用户输入的用户名或用户ID号

if [ -z $username ];then                     # 判断输入用户名或用户ID号是否为空
  echo "请输入用户名或用户ID号!"
  exit 1
fi

id $username > /dev/null 2>&1      # 检查用户是否存在

if [ $? -eq 0 ]                    # 检查id命令返回值
  then 
  echo "$username用户 存在"
else
  echo "$username用户 不存在"
fi

测试示例:

3、检查当前内核的主版本是否为 3 且次版本是否大于 10,并输出相应判断结果。

#!/bin/bash

zhu=$(uname -r | cut -d '.' -f1)   # 内核主版本
ci=$(uname -r | cut -d '.'  -f2)   # 内核次版本


if [ "$zhu" -eq 3 ]  # 检查主版本号是否为3
  then
  echo "主版本号为:3"
else
  echo "主版本号为:$zhu,不为3"
fi

if [ "$ci" -gt 10 ]  # 检查次版本号是否大于10
  then
  echo "次版本号为:$ci,大于10"
else
  echo "次版本号为:$ci,不大于10"
fi

测试示例:

4、检查 nginx 服务是否正在运行,若未运行则启动 nginx 服务并设置其开机自启,同时输出相应操作信息。

#!/bin/bash

# 检查 Nginx 服务状态
systemctl status nginx >/dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "nginx 服务正在运行"
else
    echo "nginx 服务不存在或处于关闭状态"
    echo "尝试开启 nginx 服务"
    
    # 尝试启动 Nginx 服务
    if systemctl start nginx >/dev/null 2>&1; then
        echo "nginx 服务开启成功"
    else
        echo "nginx 服务开启失败"
        exit 1
    fi
    
    # 检查 Nginx 是否已经设置为开机自启
    if systemctl is-enabled --quiet nginx; then
        echo "nginx 服务已经是开机自启,无需设置"
    else
        echo "nginx 服务未设置开机自启动,正在设置开机自启"
        
        # 尝试设置 Nginx 开机自启
        if systemctl enable nginx >/dev/null 2>&1; then
            echo "nginx 开机自启设置成功"
        else
            echo "nginx 开机自启设置失败:$(systemctl enable nginx 2>&1)"
            exit 1
        fi
    fi
fi

测试示例:

5、编写一个函数,接收 $1 变量作为主机地址,用于判断该指定主机是否能够 ping 通并给出结果。

#!/bin/bash

# 定义函数来检查主机是否能够 ping 通
ping_host() {
    local host=$1
    if ping -c 2 -W 2 "$host" &> /dev/null; then
        echo "主机 $host 可以 ping 通"
    else
        echo "主机 $host 无法 ping 通"
    fi
}

# 检查是否提供了主机地址参数
if [ -z "$1" ]; then
    echo "请提供一个主机地址作为参数"
    exit 1
fi

# 调用函数并传递主机地址参数
ping_host "$1"

测试示例:

 6、编写一个报警脚本,当满足以下条件时向指定邮箱发送告警邮件:根分区剩余空间小于 20%;内存已用空间大于 80%。并设置该脚本配合 crond 服务每 5 分钟执行一次检查,发送邮件的命令示例为 [root@locaklhost ~]# echo "邮件正文" | mail -s "邮件主题" alice。

#!/bin/bash

# 邮件接收者
email=邮箱号     # 设置为相应的邮箱号

# 检查根分区剩余空间
use1=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
if [ "$use1" -gt 80 ]; then
    echo "警告:根分区剩余空间小于 20%,已用 $use1%" | mail -s "根分区空间告警" $email
fi

# 检查内存使用情况
shu1=$(free -m | grep "Mem:" | tr -s " " | cut -d " " -f 3)
shu2=$(free -m | grep "Mem:" | tr -s " " | cut -d " " -f 2)
use2=$(echo "scale=2; ($shu1 / $shu2) * 100" | bc)
if [ $(echo "$use2 > 80" | bc) -eq 1 ]; then
    echo "警告:内存已用空间大于 80%,已用 $use2%" | mail -s "内存使用告警" $email
fi

设置脚本执行权限、配置定时任务

使用crontab配置定时任务,每五分钟执行一次。

在crontab文件中添加:*/5 * * * *  /root/sh/6.sh

测试示例:

7、编写一个脚本,判断用户输入的内容是否为数字,若是数字则进一步判断该数字是否大于 10 并输出结果。

#!/bin/bash

# 提示用户输入内容
echo "请输入一个数字:"
read input

# 判断输入是否为数字
if [[ $input =~ ^[0-9]+$ ]]; then
    # 输入是数字
    if [ $input -gt 10 ]; then
        echo "输入的数字 $input 大于 10"
    else
        echo "输入的数字 $input 不大于 10"
    fi
else
    # 输入不是数字
    echo "输入的内容不是一个有效的数字"
fi

测试示例:

8、编写一个脚本,用于计算用户输入的任意两个整数的和、差、乘积、商、余数。在脚本中先判断用户输入的参数数量是否为两个,如果不是则提示正确的用法;接着判断用户输入的是否为整数,如果不是则给出提示并终止脚本运行。

#!/bin/bash

# 检查参数数量是否为两个
if [ $# -ne 2 ]; then
    echo "请传入两个整数参数: <整数1> <整数2>"
    exit 1
fi

# 检查输入是否为整数
if ! [[ $1 =~ ^-?[0-9]+$ ]] || ! [[ $2 =~ ^-?[0-9]+$ ]]; then
    echo "错误:输入的参数必须是整数"
    exit 1
fi

# 获取输入的两个整数
num1=$1
num2=$2

# 检查第二个整数是否为0,避免除法和取余操作的错误
if [ $num2 -eq 0 ]; then
    echo "错误:第二个整数不能为0,因为除法和取余操作无法进行"
    exit 1
fi

# 计算和、差、乘积、商和余数
sum=$((num1 + num2))
diff=$((num1 - num2))
product=$((num1 * num2))
quotient=$((num1 / num2))
remainder=$((num1 % num2))

# 输出结果
echo "输入的整数为:$num1 和 $num2"
echo "和:$sum"
echo "差:$diff"
echo "乘积:$product"
echo "商:$quotient"
echo "余数:$remainder"

测试示例:


http://www.kler.cn/a/413661.html

相关文章:

  • 前端项目的动态路由实现(vue)
  • 操作系统的发展趋势是什么
  • 【ubuntu24.04】GTX4700 配置安装cuda
  • Python 爬虫入门教程:从零构建你的第一个网络爬虫
  • Next.js 独立开发教程(八):静态渲染与动态渲染的应用
  • CUDA补充笔记
  • Soul App创始人张璐团队亮相GITEX GLOBAL 2024,展示多模态AI的交互创新
  • vue——v-model,computed,watch(内含项目实战)
  • Bitcoin---P2SH;P2SH举例;P2SH的局限性
  • 走出“ICU”,小鹏汽车低价回血
  • 速盾:ddos防御手段哪种比较好?高防cdn怎么样?
  • spring声明式事务源码详解
  • springboot+redis+lua脚本实现滑动窗口限流
  • 追加docker已运行容器添加或修改端口映射方法
  • 可视化绘图技巧100篇基础篇(十)-堆叠条形图(stacked bar)(二)
  • Unity-Lightmap入门篇
  • Mongodb入门到放弃
  • vue3 开发利器——unplugin-auto-import
  • React Hooks中use的细节
  • 【探寻密码的奥秘】-001:解开密码的神秘面纱
  • Spring MVC:原理、配置与基础应用详解
  • 【人工智能】Python常用库-Scikit-learn常用方法教程
  • 泷羽sec学习打卡-shell命令2
  • 【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用
  • Day3 苍穹外卖项目 公共字段自动填充(AOP)、文件上传、新增菜品、菜品分页查询、删除菜品、修改菜品
  • 【linux】手搓线程池