Shell脚本入门实战:探索自动化任务与实用场景
引言
Shell脚本作为一种强大的自动化工具,在现代操作系统中具有广泛的应用。无论是简单的文件操作,还是复杂的系统管理,Shell脚本都能提供高效、快速的解决方案。在本文中,我们将探索Shell脚本的基础知识,并通过实战场景示例,一起深入了解Shell脚本编程。
1. Shell脚本入门
Shell是用户与操作系统内核之间的接口,而Shell脚本是一种将Shell命令组织起来,以实现特定功能的文本文件。将介绍Shell脚本的基本语法和结构。
1.1 基础语法
Shell脚本以 #!/bin/bash 开头,用来指定脚本解释器。接下来是一系列命令,可以使用变量、条件语句、循环等。
#!/bin/bash# 定义变量并输出
name="World"
echo "Hello, $name!"
1.2 控制结构
Shell脚本支持if-else、for和while等控制结构,用于根据条件执行命令或控制循环。
#!/bin/bash# 使用if-else判断条件
age=25
if [ "$age" -ge 18 ]; thenecho "You are an adult."
elseecho "You are a minor."
fi
1.3 变量和输入
用Shell脚本获取用户输入的变量,对变量进行操作。
#!/bin/bash# 获取用户输入
echo "Enter your name: "
read name# 输出变量内容
echo "Hello, $name! Welcome to Shell scripting."# 数值计算和变量操作
num1=10
num2=5sum=$((num1 + num2))
echo "Sum of $num1 and $num2 is: $sum"# 字符串操作
greeting="Hello"
greet="$greeting, $name!"
echo "$greet"
1.5 循环结构
使用循环结构进行迭代和重复操作。
#!/bin/bash# 使用for循环输出数字序列
echo "Counting from 1 to 5:"
for i in {1..5}
doecho "$i"
done# 使用while循环输出数字序列
echo "Counting from 5 to 1:"
counter=5
while [ $counter -gt 0 ]
doecho "$counter"((counter--))
done
2. 实战场景示例
2.1 批量文件重命名
#!/bin/bash# 源文件目录
source_dir="/path/to/source"# 批量重命名文件
for file in "$source_dir"/old_*
donew_name="${file/old_/new_}"mv "$file" "$new_name"echo "Renamed $file to $new_name"
done
2.2 数据备份和清理
编写一个脚本,备份指定目录的数据到远程服务器,并保留一定数量的备份副本,同时删除旧的备份文件。
#!/bin/bash# 远程备份服务器信息
remote_server="user@remote_server"
backup_dir="/path/to/remote/backup"# 本地备份信息
source_dir="/path/to/source"
local_backup_dir="/path/to/local/backup"
backup_count=5# 创建本地备份目录
mkdir -p "$local_backup_dir"# 备份数据到远程服务器
rsync -avz "$source_dir" "$remote_server:$backup_dir/backup_$(date +"%Y%m%d%H%M%S")"# 保留一定数量的本地备份副本,删除旧备份
backup_files=$(ls -t "$local_backup_dir" | grep -E 'backup_[0-9]{14}' | tail -n +"$((backup_count + 1))")
for file in $backup_files
dorm "$local_backup_dir/$file"echo "Deleted old backup: $file"
done
2.3 查找并删除特定类型的文件
#!/bin/bash# 指定目录和文件类型
directory="/path/to/directory"
file_extension=".log"# 查找并删除特定类型的文件
find "$directory" -type f -name "*$file_extension" -delete
echo "Deleted all $file_extension files in $directory"
2.4 计算文件行数并输出最大行数的文件
#!/bin/bash# 指定目录
directory="/path/to/directory"# 计算每个文件的行数并输出最大行数的文件
max_lines=0
max_file=""
for file in "$directory"/*
doif [ -f "$file" ]; thenlines=$(wc -l < "$file")if [ "$lines" -gt "$max_lines" ]; thenmax_lines=$linesmax_file=$filefifi
doneecho "File with the most lines: $max_file"
echo "Number of lines: $max_lines"
2.5 日志文件分析
分析日志文件,并显示最常见的错误。
#!/bin/bash# 分析日志文件中的错误
log_file="/path/to/logfile.log"echo "Top 5 Errors:"
grep -E "ERROR" "$log_file" | cut -d" " -f5- | sort | uniq -c | sort -nr | head -n 5
2.6 自动化Git仓库备份
自动备份Git仓库到指定目录。
#!/bin/bash# 源Git仓库和备份目录
source_repo="/path/to/source_repo"
backup_dir="/path/to/backup"# 创建备份目录(如果不存在)
mkdir -p "$backup_dir"# 进入源Git仓库目录,执行备份操作
cd "$source_repo" || exit
git bundle create "$backup_dir/source_repo_$(date +"%Y%m%d%H%M%S").bundle" --all
echo "Backup completed!"
2.7 网络检测和报警
检测特定主机的可用性,并在不可用时发送警报通知。
#!/bin/bash# 主机和端口信息
host="example.com"
port=80# 检测主机可用性
nc -z -w 5 "$host" "$port"
if [ $? -eq 0 ]; thenecho "Host is reachable."
elseecho "Host is unreachable. Sending alert..."# 调用发邮件或短信的接口
fi
2.8 数据库备份与清理
备份数据库并保留一定数量的备份副本。
#!/bin/bash# 数据库备份目录和备份数量
backup_dir="/path/to/db_backup"
backup_count=5# 备份数据库
mysqldump -u username -p password database_name > "$backup_dir/backup_$(date +"%Y%m%d%H%M%S").sql"# 保留一定数量的备份副本,删除旧备份
cd "$backup_dir" || exit
ls -t | tail -n +"$((backup_count + 1))" | xargs rm --
echo "Database backup completed and old backups cleaned."
3. Shell脚本进阶
4.1 数据处理与分析
使用Shell脚本处理和分析数据文件。假设我们有一个包含学生成绩的文本文件,我们想计算平均分和最高分。
#!/bin/bash# 数据文件
data_file="student_scores.txt"# 计算平均分和最高分
total=0
count=0
highest=0while IFS= read -r line
doscore=$(echo "$line" | awk '{print $2}')total=$((total + score))((count++))if [ "$score" -gt "$highest" ]; thenhighest=$scorefi
done < "$data_file"average=$((total / count))
echo "Average score: $average"
echo "Highest score: $highest"
4.2 服务端口探活
使用nc(netcat)或telnet等工具进行端口连接测试。
#!/bin/bash# 指定要检测的主机和端口
host="example.com"
port=80# 检测端口是否可达
nc -z -w 5 "$host" "$port"# 检查nc命令的退出状态码
if [ $? -eq 0 ]; thenecho "Port $port on $host is reachable."
elseecho "Port $port on $host is not reachable."# 执行重启脚本,重启服务
fi
4.3 shell脚本消费kakfa并推送到接口里
#!/bin/bash# Kafka消费者配置
kafka_server="kafka-server:9092"
topic="test_topic"
group_id="group_name"# 消费消息
kafka-console-consumer.sh --bootstrap-server "$kafka_server" --topic "$topic" --group "$group_id" --from-beginning | while read message
doecho "Received message: $message"# 使用curl将消息推送到目标接口curl -X POST -H "Content-Type: application/json" -d "$message" https://localhost:8080/sendToTopicecho "Message sent to API endpoint."
done
4. 结语
Shell脚本是Unix和Linux系统中强大的自动化工具。通过基础知识、实战场景和高级技术,可以简化各种任务,从文件操作到系统管理。掌握Shell脚本,可以提高工作效率,并为处理复杂任务提供强大支持。希望这些示例能够帮助大家更好地理解并运用Shell脚本,实现各种复杂任务的自动化和优化。
相关文章:
Shell脚本入门实战:探索自动化任务与实用场景
引言 Shell脚本作为一种强大的自动化工具,在现代操作系统中具有广泛的应用。无论是简单的文件操作,还是复杂的系统管理,Shell脚本都能提供高效、快速的解决方案。在本文中,我们将探索Shell脚本的基础知识,并通过实战场…...
【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024
AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…...
Java中如何使用SQLite数据库
目录 SQLite简介SQLite优势安装 SQLite基本使用Java使用SQLite Springboot使用SQLite1.添加依赖2.配置数据库3.创建实体类 4.创建Repository接口5.创建控制器6.运行应用程序 SQLite简介 SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无…...
kettle的基本介绍和使用
1、 kettle概述 1.1 什么是kettle Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 1.2 Kettle核心知识点 1.2.1 Kettle工程存储方式 以XML形式存储以资源库方式存储…...
数据结构第2章 栈和队列
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图栈和队列1、栈1)特点2࿰…...
Axure鲜花商城网站原型图,网上花店订花O2O本地生活电商平台
作品概况 页面数量:共 30 页 兼容软件:仅支持Axure RP 9/10,非程序软件无源代码 应用领域:鲜花网、花店网站、本地生活电商 作品特色 本作品为「鲜花购物商城」网站模板,高保真高交互,属于O2O本地生活电…...
【docker】centos 使用 Nexus Repository 搭建私有仓库
Nexus Repository 是一种流行的软件仓库管理工具,它可以帮助您搭建私有仓库,以便在内部网络或私有云环境中存储、管理和分发各种软件包和组件。 它常被用于搭建Maven的镜像仓库。本文演示如何用Nexus Repository搭建docker 私有仓库。 使用Nexus Repos…...
RabbitMQ(八)消息的序列化
目录 一、为什么需要消息序列化?二、常用的消息序列化方式1)Java原生序列化(默认)2)JSON格式3)Protobuf 格式4)Avro 格式5)MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…...
23款奔驰GLC260L升级原厂540全景影像 安装效果分享
嗨 今天给大家介绍一台奔驰GLC260L升级原厂360全景影像 新款GLC升级原厂360全景影像 也只需要安装前面 左右三个摄像头 后面的那个还是正常用的,不过不一样的是 升级完成之后会有多了个功能 那就是新款透明底盘,星骏汇小许Xjh15863 左右两边只需要更换后…...
【CSS】文字描边的三种实现方式
目录 1. 可行的几种方式1.1. text-shadow 描边代码优缺点 1.2. text-stroke 描边实现优缺点 1.3. svg 描边实现优缺点 总结 1. 可行的几种方式 text-shadow–webkit-text-strokesvg 1.1. text-shadow 描边 MDN text-shadow 代码 <div class"text stroke">…...
【事务】事务传播级别
Spring事务定义了7种传播机制: PROPAGATION_REQUIRED:默认的Spring事物传播级别,若当前存在事务,则加入该事务,若不存在事务,则新建一个事务。 PAOPAGATION_REQUIRE_NEW:若当前没有事务&#x…...
Android WiFi 连接
Android WiFi 连接 1、设置中WiFi显示2、WiFi 连接流程2.1 获取PrimaryClientModeManager2.2 ClientModeImpl状态机ConnectableState2.3 ISupplicantStaNetworkCallback 回调监听 3、 简要时序图4、原生低层驱动5、关键日志 1、设置中WiFi显示 Android WiFi基础概览 packages/a…...
PLC与上位机PN通讯时,如何防止连接失败?
连接西门子PLC时失败,或者连接不上PLC,你可能需要做以下几点设置才可以。 一般来说每个PLC都有自己的IP地址,如果你的地址与PLC的地址冲突也就是地址重复是连接不上PLC的,如果地址没有冲突,但是不是在一个网段上也会导…...
LDD学习笔记 -- Linux错误码
LDD学习笔记 -- Linux错误码 EACCES(Permission Denied) 13EEXIST(File Exits) 17EINVAL(Invalid Argument) 22ENOENT(No Such File or Directory)ENOMEM(Out of Memory)EIO(Input/Output Error) 5ENOSPC(No space Left on Device)ENOTTY(Not a Typewrite)EPIPE(Broken Pipe)EI…...
华为交换机入门(六):VLAN的配置
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…...
登录验证
目录 会话技术 Cookie Session JWT JWT生成 JWT校验 会话技术 会话 打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求与响应 会话跟踪 一种维护浏览器的方法 服务器需要…...
利用Podman构建基于Fission env/builder的镜像
镜像准备 构建Dockerfile fission的基础环境包括两种:env 以及 builder。如果仅基于code构建function(i.e., 只创建deployachive),仅构建env即可;但如果需要构建sourcearchive,则需要同时创建env和builde…...
php加减乘除函数
目录 第一部分:简单示例 1、加法 2、减法 3、乘法 4、除法 第二部分:官方文档 1、加法 2、减法 3、乘法 4、除法 第一部分:简单示例 1、加法 $result bcadd(1.2, 1.4, 2); echo $result;//2.60 2、减法 $result bcsub(1.6, 1.…...
Go语言学习记录——用正则表达式(regexp包)来校验参数
前言 最近坐毕设ing,简单的一个管理系统。 其中对于用户注册、登录功能,需要进行一些参数校验。 因为之前使用过,因此这里计划使用正则表达式进行校验。但是之前的使用也仅限于使用,因此这次专门进行一次学习,并做此记…...
公司办公电脑文件防泄密系统
电脑文件防泄密系统是一种用于保护企业机密文件的软件系统,它采用一系列的安全技术手段,如数据加密、访问控制、审计跟踪等,来确保企业机密文件不被非法获取、窃取或泄漏。这种系统通常适用于企业、政府机构等需要对重要文件进行保密的机构。…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...
