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

shell脚本合集

shell 脚本使用合集

最近写了个打印日志的shell 记录一下;

#!/bin/bash
# 涵盖大部分使用场景
# 1. 基础配置与颜色配置(提升可读性)
# 定义颜色变量,方便后续输出高亮信息
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color (重置颜色)# 开启严格模式 (最佳实践:遇到错误立即停止,防止错误扩散)
set -euo pipefail# 定义日志函数
log_info()    { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn()    { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error()   { echo -e "${RED}[ERROR]${NC} $1"; }# ------------------------------------------------------------------------------
# 2. 变量与数据类型
# ------------------------------------------------------------------------------
demo_variables() {log_info ">>> 进入模块:变量与字符串操作"# 定义变量 (注意:等号两边不能有空格)local name="ShellMaster"local version=1.0local is_active=true# 字符串拼接local greeting="Hello, ${name}!"# 获取命令执行结果 (命令替换)local current_date=$(date +%Y-%m-%d)local current_dir=$(pwd)# 数组的使用local fruits=("Apple" "Banana" "Cherry")echo "--------------------------"echo "问候语: $greeting"echo "日期: $current_date"echo "当前目录: $current_dir"echo "数组第二个元素: ${fruits[1]}" # 数组索引从0开始echo "数组所有元素: ${fruits[@]}"echo "--------------------------"
}# ------------------------------------------------------------------------------
# 3. 参数解析 (处理命令行参数)
# ------------------------------------------------------------------------------
demo_arguments() {log_info ">>> 进入模块:参数解析"# 这是一个演示函数,实际运行时通过 ./script.sh -u user -v 调用# 使用 getopts 处理标准参数 (-u username -v -h)local username=""local verbose=false# 重置 getopts 索引OPTIND=1 # h: help, u: user (需要参数), v: verbose (不需要参数)while getopts "h?u:v" opt; docase "$opt" inh|\?)echo "用法: $0 [-u 用户名] [-v]"return 0;;u)  username=$OPTARG;;v)  verbose=true;;esacdone# 偏移参数,让 $1 指向非选项参数shift $((OPTIND-1))if [ -n "$username" ]; thenlog_success "指定用户: $username"elselog_warn "未指定用户,使用默认用户"fiif [ "$verbose" = true ]; thenlog_info "详细模式已开启"fi
}# ------------------------------------------------------------------------------
# 4. 流程控制 (If/Case)
# ------------------------------------------------------------------------------
demo_conditions() {log_info ">>> 进入模块:条件判断"local score=85# If-Else 结构if [ "$score" -ge 90 ]; thenlog_success "等级: A (优秀)"elif [ "$score" -ge 80 ]; thenlog_info "等级: B (良好)"elif [ "$score" -ge 60 ]; thenlog_warn "等级: C (及格)"elselog_error "等级: D (不及格)"fi# 文件判断 (常见场景)local test_file="./test_temp.txt"# 创建临时文件用于测试touch "$test_file"if [ -f "$test_file" ]; thenlog_success "文件 $test_file 存在且是普通文件"fiif [ ! -d "$test_file" ]; thenlog_info "$test_file 不是一个目录"fi# 清理测试文件rm "$test_file"# Case 结构 (类似于 Switch)local os_type=$(uname -s)case "$os_type" inLinux)log_info "操作系统: Linux";;Darwin)log_info "操作系统: macOS";;*)log_warn "操作系统: 其他 ($os_type)";;esac
}# ------------------------------------------------------------------------------
# 5. 循环结构 (For/While)
# ------------------------------------------------------------------------------
demo_loops() {log_info ">>> 进入模块:循环结构"# C语言风格的 For 循环log_info "--- C风格 For 循环 ---"for ((i=1; i<=3; i++)); doecho "计数: $i"done# 遍历列表/数组log_info "--- 遍历数组 ---"local servers=("Web" "DB" "Cache")for server in "${servers[@]}"; doecho "正在检查服务: $server ..."# sleep 0.1 # 模拟耗时操作done# While 循环 (读取文件或持续监控)log_info "--- While 循环 ---"local count=1while [ $count -le 3 ]; doecho "While 循环次数: $count"((count
http://www.jsqmd.com/news/626153/

相关文章:

  • LSM6DS0惯性测量单元驱动开发与嵌入式IMU实战
  • 高灵敏柔性无损夹持,力控夹爪厂商技术实力深度测评 - 品牌2026
  • EspMQTTClient:ESP32/ESP8266的Wi-Fi+MQTT一体化连接框架
  • 周红伟:替代龙虾的是什么?从 OpenClaw 到 Hermes:会自己长大的 AI 代理
  • 油性发质发胶推荐|油头必看!定型控油不塌顶,告别“大油头”尴尬 - 品牌测评鉴赏家
  • MinerU 2.5-1.2B PDF提取镜像:5分钟快速部署,一键转换复杂PDF为Markdown
  • LSM6DS0超低功耗六轴IMU硬件原理与嵌入式驱动实战
  • 2026届必备的六大降AI率助手推荐榜单
  • 优秀的截图软件HyperSn
  • 用Node-RED搭建智能相册:自动分类你手机里的1000张照片(基于COCO-SSD模型)
  • SDHCFileSystem:嵌入式高可靠FAT文件系统实现
  • 从TO-220到SOT-223:LM317/LM337不同封装选型与PCB布局实战指南
  • 揭秘!这些发泥堪称头发的“隐形保镖”不伤发 - 品牌测评鉴赏家
  • Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接倩
  • FLUX.1海景图生成实战案例:基于512/768/1024三档分辨率的GPU显存与耗时对比
  • NeoSWSerial:资源受限MCU的无TIMER全双工软件串口
  • DABShield数字广播扩展板嵌入式驱动开发指南
  • 实测30+款发胶,2026年发胶排行参考!新手参考选择更省心 - 品牌测评鉴赏家
  • 【仅限Q2释放】大模型成本健康度诊断矩阵(2026版):含17项KPI阈值、5类风险等级判定及自动修复建议
  • 2026技术分享:电力设备防腐涂料的性能要求与品牌选择指南 - 优质品牌商家
  • 2026手动剃须刀大赏:十款品牌,总有一款适合你 - 品牌测评鉴赏家
  • ESP居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现急
  • 零基础玩转all-MiniLM-L6-v2:手把手教你搭建电商语义搜索
  • STM32以太网Blynk联网库:硬件无关配置与自动故障切换
  • 2026油皮男士素颜霜实测推荐!理然稳居第一,控油遮瑕伪素颜全攻略 - 品牌测评鉴赏家
  • 一天一个Python库:greenlet - 轻量级并发,协程切换的基石彻
  • 2026临沂成人高考报名点怎么选?硬核鉴别指南来了 - 优质品牌商家
  • 2026工业耐高温涂料全攻略:特种聚合物水泥砂浆/生产设备防腐涂料/耐晒外壁防腐涂料/耐晒油漆/耐腐蚀油漆/选择指南 - 优质品牌商家
  • LiuJuan20260223Zimage在软件测试中的应用:智能用例生成
  • STM32密码锁避坑指南:CubeMX配置IIC驱动OLED,解决显示乱码和按键扫描问题