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

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.xdnf.cn/news/315055.html

相关文章:

  • 数据中心 第十五次CCF-CSP计算机软件能力认证
  • 【day04】Fibonacci数列 | 单词搜索 | 杨辉三角
  • privateGPT和RAGflow之间的区别
  • 深入浅出HTML:构建现代网页的基石
  • 如何在24G显存机器上搭建一个超过gpt效果的DeepSeek-R1?
  • Eclipse通过Tomcat启动web项目报错
  • 20. C++使用HashTable同时出封装unordered_map和unordered_set
  • Ubuntu 配置网络接口端点(静态 IP 地址)详细教程
  • 亿级流量系统架构设计与实战(五)
  • mysql集成Qwen大模型MCP计算【附实战代码】
  • 【iOS】源码阅读(三)——内存对齐原理
  • AGV导航控制器技术方案——基于EFISH-SBC-RK3576/SAIL-RK3576的国产化革新‌(新一代工业级自主可控解决方案)‌
  • 战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?
  • 从字节到链接:用类型化数组生成神奇的对象 URL
  • 如何进行室内VR全景拍摄?
  • Android 有线网开发调试总结
  • 【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术
  • C26-冒泡排序法
  • Flutter——数据库Drift开发详细教程(五)
  • 二叉平衡树
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.29)
  • Linux 驱动开发步骤及 SPI 设备驱动移植示例
  • 基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例
  • Docker 容器镜像环境的依赖导出
  • Android 10.0 SharedPreferences in credential encrypted storage are not avai
  • 声波解码器:当40kHz遇见AIoT时代——超声波传感器的“隐形智慧”革命
  • 从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
  • 【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
  • 内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
  • stm32常见错误