Shell编程-5 📅 发布时间:2026/7/8 16:28:55 👁️ 浏览次数: 1. 数组数组也是一种变量一组数据数组可以存放多个 相关联内容通过访问数组调用1.1. 数组赋值1.批量赋值 ip_array(10.0.0.1 10.0.0.2 10.0.0.200) array(命令结果) array(cat ip.txt) 2.逐个元素赋值 array[0]第一个值 array[1]第二个值 array[2]第三个值 3.red命令赋值 交互式输入-a参数可以赋值给数组 read -p 输入 -a array案例26书写脚本批量检查ip/域名,ip或域名存放在数组变量中#!/bin/bash ############################################################## # File Name: 26-ip_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## source /server/scripts/func.d/color_func.sh #array ip_array(cat /server/scripts/ip.txt) #ping for ip in ${ip_array[*]} do ping -c1 -W 1 ${ip} /dev/null 21 if [ $? -eq 0 ];then greenecho ${ip}可以ping通 else redecho ${ip}不可以ping通 fi done1.2. 技巧命令参数curl命令包含选项选项中还有引号可以使用数组解决curl(选项)2. Debug-xbash -x sh -x 显示脚本运行过程 一般使用这个进行调试精确控制脚本中某个范围的内容显示详细过程其他的不显示详细过程#开始 set -x 中间的内容会显示详细的执行过程 #结束 set x配合函数注释排除法使用echo输出变量内容id $user echo $? id $user rc$?3. 案例3.1. 案例27:书写系统僵尸进程检查与处理的脚本检查: top命令的 0 zombie 即可.处理:定位到具体的僵尸进程僵尸进程的pid找出僵尸进程的父进程的id,ppid判断ppid是否为1是则提示重启系统.否,提示是否要结束掉这个进程,输入yes则结束#!/bin/bash ############################################################## # File Name: 27-zombie_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #color func func_file/server/scripts/func.d/color_func.sh if [ -f ${func_file} ];then source ${func_file} else exit 1 fi #1.vars zombie_numtop -bn 1 | awk NR2{print $(NF-1)} zombie_pidps aux | awk $8~/Z/{print $2} function check_zombie_num() { if [ ${zombie_num} -eq 0 ];then greenecho 当前系统没有僵尸进程了,继续摸鱼 else redecho 当前系统有${zombie_num}个僵尸进程,请及时处理。 check_zombie fi } #check_zombie func function check_zombie() { for id in ${zombie_pid} do zombie_ppidps -ef | grep ${id} | grep -v grep | awk {print $3} if [ ${zombie_ppid} -eq 1 ];then redecho 需要重启系统解决 else read -p 是否结束这个${zombie_ppid}进程,请输入yes,结束这个僵尸进程: yes_kill case ${yes_kill} in yes) kill ${zombie_ppid} ;; *) redecho ${zombie_ppid}僵尸进程未结束已退出 exit esac fi done } check_zombie_num3.2. 案例28: 磁盘空间不足案例检查: 1.是否有block导致的磁盘空间不足 df -h |awk -F [ %] $590 NR1 2.是否有inode导致的磁盘空间不足 df -i |awk -F [ %] $590 NR1 处理: 情况1:df -h du -sh 处理 情况2:lsof |grep delete 情况3:df -i find 大于1MB目录#!/bin/bash ############################################################## # File Name: 28-disk_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #color func func_file/server/scripts/func.d/color_func.sh if [ -f ${func_file} ];then source ${func_file} else exit 1 fi #1.block function block_check() { disk_usedf -h / | awk NR2{print $(NF-1)} disk_statusecho ${disk_use} 60% | awk $1 $2{print ge} | grep ge | wc -l if [ ${disk_status} -ne 0 ];then redecho 当前磁盘空间使用率${disk_use},磁盘空间不足,请及时处理 block_reason else greenecho 当前磁盘空间使用率${disk_use},正常,继续摸鱼 fi } #2.inode function inode_check() { inode_usedf -i / | awk NR2{print $(NF-1)} inode_statusecho ${inode_use} 60% | awk $1 $2{print ge} | grep ge | wc -l if [ ${inode_status} -ge 1 ];then redecho 当前inode空间使用率${inode_use},inode空间不足 inode_reason else greenecho 当前inode空间使用率${inode_use},正常,继续摸鱼吧 fi } #3.deleted function block_reason() { big_filesfind /study -type f -size 1G 2/dev/null yellowecho 已找到大于1G的文件:${big_files},请及时处理 } #4.lsof_deleted function inode_reason() { big_dirfind / -type d -size 100k 2/dev/null yellowecho 已找到大于10M的目录:${big_dir},请及时处理 } #func function main() { block_check inode_check } main4. 三剑客4.1. sedsed与变量src172.16.1.210 dest192.168.16.253 sed使用单引号不会解析变量 sed s#$src#$dest#g ip.txt sed使用双引号会解析变量 sed s#$src#$dest#g ip.txt案例29书写1个修改配置文件的函数chcfg port 2222 sshd_config chcfg IPADDR 10.0.0.211 ifcfg-ens33 1.在文件中过滤是否有port的行精确过滤没有退出 grep -w sed /\b \b/s###g 2.找出这行取出当前的值22进行替换2222 3.提示配置修改完成请重启服务脚本#!/bin/bash ############################################################## # File Name: 29-change_cfg.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #color func func_file/server/scripts/func.d/color_func.sh if [ -f ${func_file} ];then source ${func_file} else exit 1 fi #1.vars src$1 dest$2 file$3 #2.check_file function check_file() { if [ ! -f ${file} ];then redecho 文件不存在,请检查文件是否输入正确 exit 1 fi } #3.check_args function check_args() { if [ $# -ne 3 ];then redecho error: usage: $0 过滤的内容 修改的内容 修改的文件 exit 2 fi } #4.check_src_cont function check_src_cont() { src_contegrep -v ^$|^# ${file} | grep -wc ${src} ${file} if [ ${src_cont} -eq 0 ];then redecho error: ${src_cont},过滤的内容不存在,请重新输入 exit 3 fi } #5.sed function change_cfg() { old_contegrep -v ^$|^# ${file} | grep -w ${src} ${file} | awk -F [ ] {print $2} sed -i.bak /\b${src}\b/s#${old_cont}#${dest}#g ${file} if [ $? -eq 0 ];then grep -w ${src} ${file} greenecho 配置文件修改成功,重启服务后生效 else redecho 修改失败,请重新输入 fi } #6.func_main function main() { check_file check_args $* check_src_cont change_cfg } main $*4.2. awkawk数组统计access.log文件第一列是ip地址第10是访问的资源大小 需求01:统计每个ip出现的次数awksortuniq就可以实现 需求02:统计每个ip使用的流量 awk BEGIN{}shell中 for ip in ${ips[*]} do echo $ip done 变量获取到的是数组具体值 awk中 for(ip in ips) print ip,ips[ip] 变量获取到的是下标[下标]案例30统计去重cat /server/files/url.txtEOF http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html http://post.etiantian.org/2.html EOF awk -F / {url[$2]} END{for(u in url) print u,url[u]} /server/files/url.txt | sort -rnk2 awk -F / {url[$2]url[$2]1} END{for(u in url) print u,url[u]} /server/files/url.txt | sort -rnk2 END{} 内容会在awk读取完成文件最后运行案例31统计去重并求和数组awk {ip[$1]ip[$1]$10} END{for(i in ip) print i,ip[i]} access.log | column -t | sort -rnk2 | head5. shell编程总结变量普通变量 命令规则环境变量 PATH , UID , LANG , PS1特殊变量: $n , $0 , $# , $* , $ , $?判断条件表达式比较大小 -eq -ne -gt -ge -lt -le字符比较 ! -z -n文件判断 -f -d -L/-h -s -x逻辑判断 -a -o 正则匹配 [[ ~ ]]if单分支双分支多分支case菜单选择循环forwhile死循环读取文件循环控制continue 退出当前循环进入下一次循环break 退出循环exit 退出脚本return 退出当前函数函数格式函数传参$n , $0 , $# , $* , $ , $?颜色数组目标自动化与定时任务配合定时检查定时备份xxx部署服务脚本一般先手动部署根据流程书写脚本服务检查脚本服务管理脚本大脚本巡检脚本服务安装脚本优化脚本安全检查脚本安全加固等保加固
第二篇:雅诗智能自动化工具架构剖析 雅诗智能自动化系列: 第一篇:免ROOT无代码5分钟实现自动化脚本第二篇:雅诗智能自动化工具架构部析第三篇:雅诗机器人操作方法第四篇:雅诗智能截图彩色工具实操第五篇:小游戏脚本制作实操作第六篇ÿ… 2026/7/7 21:27:50
web基础-nginx 1. ✅修改默认页面返回403vim /etc/nginx/conf.d/default.conf server {listen 80 default_server;server_name localhost;return 403; }2. ✅location对用户请求中请求的URI进行判断location匹配URI写法说明location / { }默认规则,其他location规则都失败了… 2026/5/17 12:39:56
TVSample图片加载优化:ImageUtils高效缓存策略 TVSample图片加载优化:ImageUtils高效缓存策略 【免费下载链接】TVSample 项目地址: https://gitcode.com/gh_mirrors/tvs/TVSample TVSample是一个专注于电视应用开发的开源项目,其核心功能之一是实现高效的图片加载与缓存管理。本文将深入解析… 2026/7/8 13:58:54
北京华恒智信为文旅演艺行业搭建三层编制模型,破解人力高成本困局 一、行业痛点:传统全职演艺编制模式难持续 演艺是文旅项目的核心灵魂,但传统演艺团队全职运营模式存在显著的成本与效率矛盾,成为文旅行业普遍痛点。文旅演艺项目具有极强的淡旺季属性,演出场次波动极大,旺季可日均多… 2026/7/8 16:28:41
Web安全实战:备份文件泄露漏洞深度解析与一体化防御方案 1. 项目概述:为什么备份文件泄露是Web安全的“隐形杀手”? 在Web安全攻防的战场上,我们常常把目光聚焦在SQL注入、XSS跨站脚本、文件上传这些“明星漏洞”上,而一个看似不起眼,却几乎存在于每个老旧或管理疏忽的站点中… 2026/7/8 16:28:41
NBM7100A与PIC18F2458的低功耗电源管理方案 1. 项目背景与核心挑战在物联网设备和便携式电子设备领域,初级电池(不可充电电池)仍然是许多应用的首选电源方案。这类电池具有成本低、自放电率小、使用简单等优势,尤其适合那些需要长期工作且难以频繁更换电池的场景。然而&… 2026/7/8 16:24:35
西门子G120C变频器PROFINET通信配置用GSDML文件(V4.7.13,含图标与XML双版本) 本文还有配套的精品资源,点击获取 简介:西门子SINAMICS G120C变频器接入PROFINET网络时,需要标准GSDML设备描述文件来实现工程工具识别与参数配置。本包提供符合GSDML规范v2.31的正式发布版文件,版本号V4.7.13,发布… 2026/7/8 16:24:35
CTF Pwn实战入门:栈溢出原理与ROP链构造详解 1. 项目概述:从零到一的Pwn实战入门路径如果你刚接触CTF(Capture The Flag)安全竞赛,或者对二进制安全、漏洞利用(Pwn)感到好奇,那么“XCTF-Pwn实战:11道入门题漏洞利用与ROP链构造详… 2026/7/8 16:22:33
智能车竞赛应该是软硬不分家的 软硬不分家的比赛01 【软硬不分家的比赛】 虽然智能车赛题是以软件为中心, 但是不代表就可以放弃硬件了。 个人认为,如果是真心热爱智能车, 那么对于有些工作量比较小的组别, 像三人队, 完全是可以一个人负责完软硬件和… 2026/7/8 16:12:27
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08