Linux Shell 脚本题目集(2)

1、使用 case 语句根据用户输入的分数(0-100)输出相应的成绩等级(A, B, C, D)。

#! /bin/bash

read -p "请输入您的分数(0-100):" score

# 验证输入是否为数字且在0到100之间
if ! [[ "$score" =~ ^[0-9]+$ ]] || [ "$score" -lt 0 ] || [ "$score" -gt 100 ]; then
    echo "请输入0-100之间的有效分数!"
    exit 1
fi

case "$score" in
  8[5-9]|9[0-9]|100)   # 85-100为A
    echo "A"
    ;;
  7[0-9]|8[0-4])       # 70-84为B
    echo "B"
    ;;
  6[0-9])              # 60-69为C
    echo "C"
    ;;
  *)
    echo "D"           # 其他(0-60)为D
    ;;
esac

测试示例:

2、使用 for 循环批量创建20个用户。用户前缀和初始密码由用户输入,用户名格式为 前缀01 到 前缀20,并为每个用户设置相同的初始密码。输出每个用户的创建结果。 

#! /bin/bash

# 获取用户输入的前缀和初始密码
read -p "请输入用户前缀:" prefix
read -s -p  "请输入用户初始密码:" password

echo "正在为您循环创建20个用户..."

# 循环创建20个用户
for i in $(seq -w 1 20)
do
  username="${prefix}${i}"
  if useradd "$username";then               # 创建用户
    echo "$username:$password" | chpasswd   # 设置用户密码
    echo "用户 $username 已创建并设置了初始密码。"
  else
    echo "创建用户 $username 失败。"
  fi 
done

测试示例:

3、批量 Ping 测试并记录在线和离线主机

要求

  1. 用户输入

    • 输入网段前缀(如 192.168.2)。
    • 输入 Ping 测试的起始和结束 IP 地址范围(如 10 到 20)。
  2. Ping 测试

    • 根据用户输入生成完整的 IP 地址列表。
    • 对每个 IP 地址进行 Ping 测试,判断主机是否在线。
  3. 记录结果

    • 在线主机的 IP 地址记录到 /tmp/host_up.txt
    • 离线主机的 IP 地址记录到 /tmp/host_down.txt
#! /bin/bash

read -p "请输入网段前缀(如:192.168.2):" prefix
echo "请输入测试的IP范围(0-255之间)"

while true
do
  read -p "起始IP地址(如:10):" start
  read -p "结束IP地址(如:20):" end

  # 检查输入是否为数字,并且在有效范围内
  if [[ "$start$end" =~ ^[0-9]+$ ]] && [ "$start" -ge 0 ] &&  [ "$start" -le 255 ] && [ "$end" -le 255 ] && [ "$end" -ge "$start" ]
  then
    break
  else
    echo "起始IP或结束IP输入有误!"
    echo "请输入有效的起始和结束IP(0-255),且起始IP不大于结束IP。"
  fi
done

# 输出文件
up_file="/tmp/host_up.txt"
down_file="/tmp/host_down.txt"

# 创建或清空输出文件
> "$up_file"
> "$down_file"

for i in $(seq "$start" "$end")   # 循环测试
do 
  ip="${prefix}.${i}"
  ping -c 2 -w 2 "$ip" &> /dev/null
  if [ $? -eq 0 ];then
    echo "$ip" >> "$up_file"
    echo "主机 $ip 在线"
  else
    echo "$ip" >> "$down_file"
    echo "主机 $ip 离线"
  fi 
done

echo  "测试完毕,结果已保存到 $up_file 和 $down_file"

测试示例:

4、批量修改远程主机 root 密码

要求:

  1. 使用 for 循环:读取 hosts.txt 文件中的主机 IP,依次连接并修改 root 密码。
  2. 记录结果:无论成功或失败,详细记录到 password_change.log,包括时间戳、IP 地址和错误信息。
  3. SSH 公钥认证
    • 生成 SSH 密钥对(如 ed25519)。
    • 使用 ssh-copy-id 分发公钥到远程主机。

 在管理主机上生成SSH密钥对

 分发公钥到远程主机

 分发给远程主机192.168.108.131

  分发给远程主机192.168.108.133

创建主机IP文件hosts.txt

 批量修改密码脚本

#!/bin/bash

# 定义日志文件路径
LOG_FILE="password_change.log"

# 清空日志文件
> $LOG_FILE

# 提示用户输入新密码
echo "请输入新的 root 密码:"
read -s -p "密码: " new_password
echo
read -s -p "确认密码: " confirm_password
echo

# 检查两次输入的密码是否一致
if [ "$new_password" != "$confirm_password" ]; then
    echo "密码不匹配。退出脚本。"
    exit 1
fi

# 检查密码是否为空
if [ -z "$new_password" ]; then
    echo "密码不能为空。退出脚本。"
    exit 1
fi

# 读取主机列表文件并使用 for 循环处理每个主机
for host in $(cat hosts.txt); do
    echo "正在处理主机: $host" | tee -a $LOG_FILE

    # 尝试通过 SSH 执行远程命令修改密码
    if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd"; then
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改成功:$host" | tee -a $LOG_FILE
    else
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改失败:$host" | tee -a $LOG_FILE
        echo "错误详情:" | tee -a $LOG_FILE
        # 记录详细的错误信息
        ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd" 2>&1 | tee -a $LOG_FILE
    fi

    echo "----------------------------------------" | tee -a $LOG_FILE
done

测试示例:

查看日志文件:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 (必须要混淆开了之后才才可以设置为true) proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

【Vue3】从零开始创建一个VUE项目

【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接: 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】&…

常见靶场的搭建

漏洞靶场 渗透测试(漏洞挖掘)切忌纸上谈兵,学习渗透测试(漏洞挖掘)知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及…

若依项目源码阅读

源码阅读 前端代码分析 代码生成器生成的前端代码有两个,分别是course.js用于向后端发送ajax请求的接口代码,另一个是index.vue,用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…

【算法】时间复杂度空间复杂度

0.前言 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡…

java全栈day10--后端Web基础(基础知识)

引言:只要能通过浏览器访问的网站全是B/S架构,其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址:Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程,建议…

webrtc ios h264 硬编解码

webrtc ios h264 硬编解码 一 ios 系统支持 从ios8开始,苹果公司开放了硬解码和硬编码API(即 VideoToolbox.framework API) 二 主要api 1 主要解码函数 VTDecompressionSessionCreate // 创建解码 session VTDecompressionSession…

【JavaEE】JavaEE、web 开发、框架(Spring) 、Maven

文章目录 一、JavaEE 发展历程二、什么是 web 开发1、什么是 web 开发?2、web 网站的工作流程 三、框架1、什么是框架?2、为什么要学框架?3、框架的优点(Spring Boot VS Servlet) 四、Maven 一、JavaEE 发展历程 Java…

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】

文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…

Scala学习记录,全文单词统计

package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符":把字符串用指定的分隔符,拆分成多个部分,保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…

使用 Certbot 为 Nginx 自动配置 SSL 证书

1.安装Certbot和Nginx插件 sudo apt-get update sudo apt-get install certbot python3-certbot-nginx 2.获取和安装证书 运行Certbot自动安装SSL证书。注意替换 your_domain sudo certbot --nginx -d your_domain Certbot将自动与Lets Encrypt的服务器通信,验证域…

Java之深入理解HashMap

Java之深入理解HashMap 引言 HashMap是Java程序员使用频率最高的一种映射&#xff08;<Key,Value>键值对&#xff09;数据结构&#xff0c;它继承自AbstractMap&#xff0c;又实现了Map类。 本文将深入源码解析一下HashMap的底层原理。 数据结构 HashMap底层通过维护…

HTTP 探秘之旅:从入门到未来

文章目录 导言&#xff1a;目录&#xff1a;第一篇&#xff1a;HTTP&#xff0c;互联网的“快递员”第二篇&#xff1a;从点开网页到看到内容&#xff0c;HTTP 究竟做了什么&#xff1f;第三篇&#xff1a;HTTP 的烦恼与进化史第四篇&#xff1a;HTTP 的铠甲——HTTPS 的故事第…

Docker 容器网络创建网桥链接

一、网络&#xff1a;默认情况下&#xff0c;所有的容器都以bridge方式链接到docker的一个虚拟网桥上&#xff1b; 注意&#xff1a;“172.17.0.0/16”中的“/16”表示子网掩码的长度为16位&#xff0c;它表示子网掩码中有16个连续的1&#xff0c;后面跟着16个连续的0。用于区分…

springboot366高校物品捐赠管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

upload-labs 靶场(11~21)

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

jenkins+github+springboot自动部署

背景&#xff1a; 最近看流水线有点意思&#xff0c;就说自己也搞一套。 预期效果&#xff1a; idea提交代码后&#xff0c;GitHub接收&#xff0c;jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…

kafka数据在服务端时怎么写入的

学习背景 接着上篇&#xff0c;我们来聊聊kafka数据在服务端怎么写入的 服务端写入 在介绍服务端的写流程之前&#xff0c;我们先要理解服务端的几个角色之间的关系。 假设我们有一个由3个broker组成的kafka集群&#xff0c;我们在这个集群上创建一个topic叫做shitu-topic&…

Springboot——SseEmitter流式输出

文章目录 前言SseEmitter 简介测试demo注意点异常一 ResponseBodyEmitter is already set complete 前言 最近做AI类的开发&#xff0c;看到各大AI模型的输出方式都是采取的一种EventStream的方式实现。 不是通常的等接口处理完成后&#xff0c;一次性返回。 而是片段式的处理…

【深度学习|目标跟踪】StrongSORT 详解(以及StrongSORT++)

StrongSort详解 1、论文及源码2、DeepSORT回顾3、StrongSORT的EMA4、StrongSORT的NSA Kalman5、StrongSORT的MC6、StrongSORT的BOT特征提取器7、StrongSORT的AFLink8、StrongSORT的GSI模块 1、论文及源码 论文地址&#xff1a;https://arxiv.org/pdf/2202.13514 源码地址&#…