Linux Shell 脚本题目集(2)

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

#! /bin/bashread -p "请输入您的分数(0-100):" score# 验证输入是否为数字且在0到100之间
if ! [[ "$score" =~ ^[0-9]+$ ]] || [ "$score" -lt 0 ] || [ "$score" -gt 100 ]; thenecho "请输入0-100之间的有效分数!"exit 1
ficase "$score" in8[5-9]|9[0-9]|100)   # 85-100为Aecho "A";;7[0-9]|8[0-4])       # 70-84为Becho "B";;6[0-9])              # 60-69为Cecho "C";;*)echo "D"           # 其他(0-60)为D;;
esac

测试示例:

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

#! /bin/bash# 获取用户输入的前缀和初始密码
read -p "请输入用户前缀:" prefix
read -s -p  "请输入用户初始密码:" passwordecho "正在为您循环创建20个用户..."# 循环创建20个用户
for i in $(seq -w 1 20)
dousername="${prefix}${i}"if useradd "$username";then               # 创建用户echo "$username:$password" | chpasswd   # 设置用户密码echo "用户 $username 已创建并设置了初始密码。"elseecho "创建用户 $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/bashread -p "请输入网段前缀(如:192.168.2):" prefix
echo "请输入测试的IP范围(0-255之间)"while true
doread -p "起始IP地址(如:10):" startread -p "结束IP地址(如:20):" end# 检查输入是否为数字,并且在有效范围内if [[ "$start$end" =~ ^[0-9]+$ ]] && [ "$start" -ge 0 ] &&  [ "$start" -le 255 ] && [ "$end" -le 255 ] && [ "$end" -ge "$start" ]thenbreakelseecho "起始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/nullif [ $? -eq 0 ];thenecho "$ip" >> "$up_file"echo "主机 $ip 在线"elseecho "$ip" >> "$down_file"echo "主机 $ip 离线"fi 
doneecho  "测试完毕,结果已保存到 $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" ]; thenecho "密码不匹配。退出脚本。"exit 1
fi# 检查密码是否为空
if [ -z "$new_password" ]; thenecho "密码不能为空。退出脚本。"exit 1
fi# 读取主机列表文件并使用 for 循环处理每个主机
for host in $(cat hosts.txt); doecho "正在处理主机: $host" | tee -a $LOG_FILE# 尝试通过 SSH 执行远程命令修改密码if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd"; thenecho "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改成功:$host" | tee -a $LOG_FILEelseecho "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改失败:$host" | tee -a $LOG_FILEecho "错误详情:" | tee -a $LOG_FILE# 记录详细的错误信息ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd" 2>&1 | tee -a $LOG_FILEfiecho "----------------------------------------" | tee -a $LOG_FILE
done

测试示例:

查看日志文件:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比

在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…

Redis(1)

Redis是一个在内存中存储数据的中间件。 1.在内存中存储数据。 通过数据结构来存储,mysql通过表的方式存储数据,是关系型数据库,redis通过键值对存储,key的类型是string,value的类型是非关系型数据库。 2.可编程的 …

基于Pyside6开发一个通用的在线升级工具

UI main.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>MainWindow</class><widget class"QMainWindow" name"MainWindow"><property name"geometry"&…

Linux 系统/etc目录下配置文件分类

目录 一、网络相关配置文件 主机名与 IP 映射类 /etc/hosts /etc/hostname 网络接口配置类 /etc/sysconfig/network-scripts/ifcfg-ens33 DNS 相关类 /etc/resolv.conf /etc/host.conf 网络服务相关类 /etc/hosts.allow文件 /etc/hosts.deny文件 /etc/netconfig …

自由学习记录(28)

C# 中的流&#xff08;Stream&#xff09; 流&#xff08;Stream&#xff09;是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的&#xff0c;提供了多种具体实现&#xff0c;每种实现都针对…

Redis3——线程模型与数据结构

Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理&#xff0c;以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前&#xff0c;一个redis进程只有一个io线程&#xff0c;通过reactor模式可以连接大量客户端&#xff1b;redis6.0为了…

Elasticsearch Serverless 现已正式发布

作者&#xff1a;来自 Elastic Yaru Lin 基于全新无状态&#xff08;stateless&#xff09;架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式&#xff0c;因此你可以快速启动项目而无需操作或升级&#xff0c;并且可以使用最新的向量搜索和生成式 AI 功能。 …

Android CoordinatorLayout:打造高效交互界面的利器

目录 一、CoordinatorLayout 介绍及特点 二、使用方法 2.1 创建 CoordinatorLayout 布局 2.2 添加需要协调的子视图 2.3 自定义 Behavior 三、结语 相关推荐 在Android开发中&#xff0c;面对复杂多变的用户界面需求&#xff0c;CoordinatorLayout以其强大的交互管理能力…

基于Java Springboot旅游攻略APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

多模态大语言模型的对比

简介 文章主要对比了包括 VideoLLaMA 2 、CogVLM2-video 、MiniCPM-V等模型 目前主流的多模态视觉问答大模型&#xff0c;大部分采用视觉编码器、大语言模型、图像到文本特征的投影模块 目录 简介1. VideoLLaMA 21.1 网络结构1.2 STC connector具体的架构 2. MiniCPM-V 2.62.…

Android渗透环境配置教程

工具 模拟器 ADB brew install android-platform-tools set import cert # cer 证书转为 pem 证书 openssl x509 -inform DER -in cacert.der -out cacert.pem# 获取证书的 hash 值 hash$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -n 1)# 将 pem…

Microi吾码|.NET、VUE快速搭建项目,低代码便捷开发教程

Microi吾码&#xff5c;VUE快速搭建项目&#xff0c;低代码便捷开发教程 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、VUE中使用Microi吾码3.1 前期了解3.2 创建第一个低代码应用3.3 接口API使用说明3.4 引擎界面可视化配置&#xff0c;生成API3.…

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…

AI - 如何构建一个大模型中的Tool

AI - 如何构建一个大模型中的Tool 大家好&#xff01;今天我们聊聊一个有趣的技术问题&#xff1a;什么是工具&#xff08;Tool&#xff09;&#xff0c;如何使用聊天模型调用工具&#xff0c;以及如何将工具的输出传递给聊天模型。我们还是基于LangChain来进行讨论&#xff0…

【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用

一、什么是BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简…

MyBatis异常体系中ErrorContext和ExceptionFactory原理分析

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 exceptions包分包设计ExceptionFactory类介绍为什么使用工厂不是直接new呢&#xff1f;【统一的异常处理机制】【异常的封装与转化】【…

白鹿 Hands-on:消除冷启动——基于 Amazon Lambda SnapStart 轻松打造 Serverless Web 应用(二)

文章目录 前言一、前文回顾二、在 Lambda 上运行2.1、查看 Amazon SAM template2.2、编译和部署到 Amazon Lambda2.3、功能测试与验证 三、对比 Snapstart 效果四、资源清理五、实验总结总结 前言 在这个环节中&#xff0c;我们将延续《白鹿 Hands-on&#xff1a;消除冷启动——…

Spring Shell如何与SpringBoot集成并快速创建命令行界面 (CLI) 应用程序

Spring Shell 介绍 Spring Shell 是一个强大的工具&#xff0c;可用于构建命令行应用程序&#xff0c;提供了简单的方式来创建和管理交互式 CLI。它适合那些希望通过命令行与 Java 应用程序进行交互的开发者&#xff0c;尤其是在需要自动化、交互式输入或与 Spring 生态系统集…

齐护机器人ModbusRTU RS485转TTL通信模块与ESP32 Arduino通信可Mixly的图形化编程Scratch图形化编程

齐护机器人ModbusRTU RS485-TTL通信模块 一、概念理解 Modbus协议是一种由Modicon公司&#xff08;现为施耐德电气Schneider Electric&#xff09;于1979年发表的网络通信协议&#xff0c;旨在实现可编辑逻辑控制器&#xff08;PLC&#xff09;之间的通信。 1.1 什么是Mod…

K8S版本和istio版本的对照关系

版本对照关系 下载地址1 下载地址2