shell脚本--2

1、实时监控cpu、内存的shell脚本

#!/bin/bash# 获取当前时间
DATE=$(date +"%Y-%m-%d %H:%M:%S")# 获取CPU使用情况
CPU_USAGE=$(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}')# 获取内存使用情况
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')# 输出结果
echo "$DATE CPU使用率: $CPU_USAGE%   内存使用率: $MEMORY_USAGE%"
top命令用于实时显示系统的任务管理器信息。它提供了关于系统中当前运行进程的动态视图,并允许用户监控系统的性能。
常用选项:-d 秒数      设置刷新间隔时间,例如 top -d 2 每两秒刷新一次。-p PID      只显示指定 PID 的进程,例如 top -p 1234 只显示 PID 为 1234 的进程。-u 用户名    只显示指定用户的进程,例如 top -u user 只显示用户 user 的进程。-b          批处理模式,通常与重定向结合使用,例如 top -b > top_output.txt。-n 次数      设置刷新次数后退出,例如 top -n 10 刷新 10 次后退出。free命令提供了关于物理内存(RAM)、交换空间(swap)以及缓冲区/缓存(buff/cache)的详细信息。这
常用选项:-b          以字节为单位显示内存使用情况。-k          以千字节(KB)为单位显示内存使用情况(这是默认设置)。-m          以兆字节(MB)为单位显示内存使用情况。-g          以吉字节(GB)为单位显示内存使用情况。-h          以人类可读的格式显示内存使用情况,自动选择合适的单位(KB、MB、GB)。-s 秒数      每隔指定的秒数重复显示内存使用情况。-t          显示总计行,即所有内存和交换空间的总和。-c 次数      重复显示内存使用情况指定的次数后退出

2、进入脚本所在目录

# shell脚本
#!/bin/bash# 当前目录
cur_dir=`pwd`
echo "当前执行脚本的目录:$cur_dir"# 脚本目录
script_dir=`dirname $0`
echo "脚本父目录:$script_dir"# 进入到脚本目录
script_root_dir=$(cd `dirname $0`;pwd)
echo "脚本的绝对路径:$script_root_dir"

结果:

[root@local_tmp]#
[root@local_tmp]#  ../shell/s-5.sh 
当前执行脚本的目录:/home/test/linux
脚本父目录:../shell
脚本的绝对路径:/home/test/shell
[root@local_tmp]#
[root@local_tmp]#

3、操作目录

#!/bin/bash# 创建目录
# 指定要创建的文件夹名称  
echo "--------------------------------------------------------"
path="path/parent_folder"  
# 使用mkdir命令创建文件夹  
mkdir -p "$path/$folder_name"  
echo "Folder '$folder_name' created at '$path'."# 删除目录
# 指定要删除的文件夹路径  
echo "--------------------------------------------------------"
folder_path="path/folder_to_delete"  
# 检查文件夹是否存在  
if [ -d "$folder_path" ]; then  # 使用rm命令删除文件夹及其内容  rm -rf "$folder_path"  echo "Folder '$folder_path' deleted."  
else  echo "Folder '$folder_path' does not exist."  
fi# 移动目录
# 指定要移动的文件夹路径和目标路径  
echo "--------------------------------------------------------"
source_folder="path/source_folder"  
destination_folder="path/destination"  
# 使用mv命令移动文件夹  
mv "$source_folder" "$destination_folder"  
echo "Folder moved from '$source_folder' to '$destination_folder'."# 复制文件夹
# 指定要复制的文件夹路径和目标路径  
echo "--------------------------------------------------------"
source_folder="/path/source_folder"  
destination_folder="/path/destination"  
# 使用cp命令复制文件夹及其内容  
cp -r "$source_folder" "$destination_folder"  
echo "Folder copied from '$source_folder' to '$destination_folder'."# 遍历目录
echo "--------------------------------------------------------"
for file in *; do  if [ -d "$file" ]; then  echo "$file 是一个目录"  elif [ -f "$file" ]; then  echo "$file 是一个文件"  fi  
done# 遍历目录
# 遍历指定目录及其子目录中的所有文件  
echo "--------------------------------------------------------"
find path/ -type f | while read -r file; do  echo "$file 是一个文件"  
done  
# 遍历指定目录及其子目录中的所有目录  
find path/ -type d | while read -r dir; do  echo "$dir 是一个目录"  
done# 遍历目录
process_file() {  local file="$1"  echo "处理文件: $file"  # 在这里添加处理文件的代码  
}  
process_directory() {  local dir="$1"  echo "进入目录: $dir"  # 在这里可以添加处理目录的代码,比如递归调用本脚本处理子目录  for item in "$dir"/*; do  if [ -d "$item" ]; then  process_directory "$item" # 递归处理子目录  elif [ -f "$item" ]; then  process_file "$item" # 处理文件  fi  done  echo "离开目录: $dir"  
}  
# 从指定目录开始遍历  
start_directory="path/"  
process_directory "$start_directory"

4、循环操作--数组

#!/bin/bashrm -rf result.txt# 循环打印日志过滤结果
lst=(lst_1 lst_2 lst_3 lst__4)
for st in "${lst[@]}"
doecho $stpython3 process.py $st &> logcat log | grep "abcdefg-HIGKLMN" | awk '{print $31}'  >> result.txtecho "   " >> result.txt
done
shell中数组介绍:1、声明数组可以使用圆括号 () 来声明数组,元素之间用空格分隔:my_array=(element1 element2 element3)也可以单独指定数组元素:my_array[0]=element1my_array[1]=element2my_array[2]=element32、访问数组元素使用数组的索引来访问元素,索引从0开始:# 访问第一个元素echo ${my_array[0]}# 访问第二个元素echo ${my_array[1]}使用 @ 或 * 来获取数组的所有元素:# 获取数组的所有元素echo ${my_array[@]}# 或者echo ${my_array[*]}使用 ${#array[@]} 或 ${#array[*]} 来获取数组的长度:# 获取数组的长度length=${#my_array[@]}echo "数组的长度是: $length"你可以使用 for 循环来遍历数组的所有元素:# 使用 for 循环遍历数组for element in "${my_array[@]}"; doecho "$element"done数组切片:# 获取数组的前两个元素slice=${my_array[@]:0:2}echo "切片: $slice"修改数组元素:# 修改第一个元素my_array[0]=new_element1# 输出修改后的数组echo ${my_array[@]}删除数组元素:# 删除第二个元素unset my_array[1]# 输出修改后的数组echo ${my_array[@]}

5、循环操作--读取文件每行内容

#!/bin/bashcat file.lst | while read line; doecho ${line}
done

6、按指定列的内容过滤文件的行

#!/bin/bashcat all.lst | awk -F ":" '{if($5 == 1 || $5 == 2) print $1}'

7、shell读取json文件

需要Linux上安装jq模块。

#!/bin/bashjson_str=$1# 提取字段值
aaa=$(echo "$json_str" | jq -r '.aaaaa')
if [ $? -ne 0 ]; thenexit 1
fibbb=$(echo "$json_str" | jq -r '.bbbbb')
if [ $? -ne 0 ]; thenexit 1
ficcc=$(echo "$json_str" | jq -r '.ccccc')
if [ $? -ne 0 ]; thenexit 1
fi#
#  json文件
#  {
#    "aaaaa": "----aaaaa",
#    "bbbbb": "----bbbbb",
#    "ccccc": "----ccccc"
#  }
#

8、$?变量

$?变量:这是一个特殊变量,表示上一个命令的退出状态码(Exit Status)。退出码 0 表示成功。非零退出码(如 1, 2, ...)表示失败或错误。

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

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

相关文章

性能比拼: HTTP/2 vs. HTTP/3

本内容是对知名性能评测博主 Anton Putra HTTP/2 vs. HTTP/3 performance benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本内容中,我们将比较 HTTP/2 和 HTTP/3 协议。 我们将使用 Terraform 和 Ansible 在 Google Cloud Platform (GCP) …

【Vue】组件自定义事件 TodoList 自定义事件数据传输

目录 一、绑定 二、解绑 组件自定义事件总结 TodoList案例对数据传输事件的修改 总结不易~ 本章节对我有很大收获, 希望对你也是!!! 本章节素材已上传Gitee:yihaohhh/我爱Vue - Gitee.com 前面我们学习的clikc、…

Windows远程连接MySQL报错,本地navicat能连接MySQL

一、报错 telnet 119.87.111.79 3306​​“无法打开到主机的连接。在端口 3306: 连接失败”​​ 表明无法通过 TCP 协议连接到目标服务器的 3306 端口。 二、目的 (1)​​Telnet 测试的目的​​ Telnet 仅用于测试 ​​TCP 端口是否开放​​&#xff…

电池管理系统BMS三级架构——BMU、BCU和BAU详解

储能电站的电池管理系统(BMS)通常采用三级架构:从控(BMU)、主控(BCU)、总控(BAU)。这种分层设计实现了电池模组、簇、堆的分级管理和控制,确保系统运行的安全…

C++ 基础复习

基础复习 1.const引用为什么能引用临时对象2.内联函数的额外作用3. nullptr 1.const引用为什么能引用临时对象 临时对象(Temporary Object)是在表达式求值过程中隐式创建的对象,例如: 函数返回非引用类型的值 类型转换&#xff0…

AI的出现,是否能替代IT从业者?

阐述观点:AI 的出现不会完全替代 IT 从业者,但会深刻改变 IT 行业的工作方式和岗位结构。 AI 不会完全替代 IT 从业者的原因 AI 本身需要人来开发与维护 AI 模型、系统架构、数据管道等都需要 IT 专业人员来构建和优化。 例如:AI 工程师、M…

【服务器通信-socket】——int socket(int domain, int type, int protocol);

#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); domain: AF_INET 这是大多数用来产生socket的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过是来用IPv6的地…

Python基本环境搭配

Python3 环境搭建 | 菜鸟教程 里面有直接跳转 Fitten Code 按下 Tab 键接受所有补全建议&#xff1a; 按下 Ctrl→ 键(mac系统为Command→)接收单个词补全建议&#xff1a; 用户可通过点击左上角工具栏中的Fitten Code – 开始对话或者使用快捷键CtrlAltC(mac系统为Contr…

C++负载均衡远程调用学习之HOOK注册机制

目录 1.larV0.7-hook流程的说明 2.larV0.7-TCP_server集成链接HOOK函数 3.larV0.7-TCP_client集成链接HOOK注册功能 1.larV0.7-hook流程的说明 ### 7.1 数据库表相关查询方法实现 ​ 我们先实现一些基本的数据表达查询方法&#xff1a; > lars_dns/src/dns_rout…

Rust 与 Golang 深度对决:从语法到应用场景的全方位解析

一、引言 在软件开发的快速发展浪潮中&#xff0c;Rust 和 Golang&#xff08;Go 语言&#xff09;脱颖而出&#xff0c;成为开发者热议的编程语言。Rust 凭借强大的内存安全性与卓越的性能备受赞誉&#xff0c;Golang 则以简洁的语法和出色的并发处理能力赢得开发者青睐。本文…

C++负载均衡远程调用学习之订阅功能与发布功能

目录 1.lars-DnsV0.1回顾 2.Lars-DnsV0.2-订阅功能的订阅模块分析 3.Lars-DnsV0.2-订阅模块的类的单例创建及方法属性初始化 4.Lars-DnsV0.2-发布功能的实现 5.Lars-DnsV0.2-发布功能的总结 6.Lars-DnsV0.2-订阅流程复习 7.Lars-DnsV0.2-订阅模块的集成 8.Lars-DnsV0.2订…

SurfSense开源程序是NotebookLM / Perplexity / Glean的开源替代品,连接到外部来源,如搜索引擎

​一、软件介绍 文末提供程序和源码下载 虽然 NotebookLM 和 Perplexity 等工具令人印象深刻&#xff0c;并且对于对任何主题/查询进行研究都非常有效&#xff0c;但 SurfSense 通过与你的个人知识库集成来提升这种能力。它是一个高度可定制的 AI 研究代理&#xff0c;连接到外…

基于OpenTelemetry的分布式链路追踪Trace‌实现(PHP篇)

目录 引言一、OpenTelemetry是一套可观测性标准协议二、分布式追踪&#xff08;‌Trace‌&#xff09;是OpenTelemetry的核心功能之一三、OpenTelemetry的架构原理四、OpenTelemetry的分布式追踪&#xff08;‌Trace‌&#xff09;实践1、准备PHP环境2、下载SDK3、编写实例代码…

探索智能体的记忆:类型、策略和应用

AI Agent 中的记忆&#xff1a;类型、策略和应用 记忆实现是使智能体能够保持上下文、从过去的交互中学习并做出明智决策的关键组成部分。与人类记忆非常相似&#xff0c;智能体记忆允许 AI 系统随时间存储、检索和利用信息&#xff0c;从而为用户创造更连贯和个性化的体验。 …

leetcode 2395. Find Subarrays With Equal Sum

题目描述 代码&#xff1a; class Solution { public:bool findSubarrays(vector<int>& nums) {int len nums.size();if(len <2)return false;unordered_set<int> table;int sum 0;for(int i 1;i < len;i){sum nums[i-1]nums[i];if(table.contains(…

Kubernetes(k8s)学习笔记(七)--KubeSphere 最小化安装

前情提要 可视化操作面板对于开发、运维绝对是提升工作效率的一大利器&#xff0c;因此很有必要搭建一套可视化操作来管理Kubernetes。 可视化面板有多种&#xff1a; 1.Kubernetes官方提供的默认面板&#xff1a;dashboard&#xff0c;用处不大&#xff0c;放弃&#xff1b…

MCP连接Agent:AI时代的TCP/IP

介绍 2023年&#xff0c;生成式AI爆发。2024年&#xff0c;智能体&#xff08;Agent&#xff09;接棒成为AI新焦点。2025年&#xff0c;智能体似乎已经要开始爆发了。目前的智能体更像一个“单机App”&#xff1a;彼此不了解、无法通信&#xff0c;更不能协作。类似互联网早期…

交换机工作原理(MAC地址表、VLAN)

目录 一、交换机的基本工作原理 数据帧的转发 MAC地址表的作用 交换机的转发方式 二、VLAN&#xff08;虚拟局域网&#xff09; VLAN的定义 VLAN的作用 VLAN的实现方式 VLAN的帧标记 VLAN的通信 三、交换机与VLAN的结合 四、交换机与VLAN的实际应用场景 交换机是局…

eFish-SBC-RK3576工控板外部RTC测试操作指南

备注&#xff1a; 1&#xff09;测试时一定要接电池&#xff0c;否则外部RTC断电后无法工作导致测试失败&#xff1b; 2&#xff09;如果连接了网络&#xff0c;系统会自动同步NTP时钟&#xff0c;所以需要关闭自动同步时钟。 关闭自动同步NTP时钟方法&#xff1a; 先查看是…

淘宝按图搜索商品(拍立淘)Java 爬虫实战指南

在电商领域&#xff0c;按图搜索商品功能为用户提供了更直观、便捷的购物体验。淘宝的拍立淘功能更是凭借其强大的图像识别技术&#xff0c;成为许多开发者和商家关注的焦点。本文将详细介绍如何利用 Java 爬虫技术实现淘宝按图搜索商品功能&#xff0c;包括注册账号、上传图片…