
Linux echo 命令 3 大高阶用法从日志染色到进度条告别单调输出在终端操作和脚本编写中echo可能是最常被使用的命令之一。大多数开发者仅用它来输出简单文本却不知道这个看似简单的命令隐藏着令人惊艳的潜力。本文将带你探索echo命令的三个高阶应用场景彻底改变你对终端输出的认知。1. ANSI 颜色代码与日志染色系统终端输出的单调黑白世界早已过时。通过 ANSI 转义序列我们可以创建色彩丰富的输出这在日志系统中尤其有用——不同级别的信息用不同颜色标识让问题一目了然。1.1 ANSI 颜色代码基础ANSI 颜色代码的基本格式如下echo -e \033[颜色代码m你的文本\033[0m常用颜色代码颜色前景色代码背景色代码黑色3040红色3141绿色3242黄色3343蓝色3444紫色3545青色3646白色37471.2 创建日志染色函数库将以下代码保存为color_logger.sh即可在脚本中调用不同颜色的日志函数#!/bin/bash # 定义颜色常量 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0m # No Color # 日志函数 log_error() { echo -e ${RED}[ERROR]${NC} $1 } log_warning() { echo -e ${YELLOW}[WARNING]${NC} $1 } log_info() { echo -e ${BLUE}[INFO]${NC} $1 } log_success() { echo -e ${GREEN}[SUCCESS]${NC} $1 } # 使用示例 log_info 系统初始化开始... log_warning 磁盘空间不足警告 log_error 配置文件丢失! log_success 安装完成1.3 高级样式组合除了颜色ANSI 代码还支持多种文本样式# 加粗红色文字 echo -e \033[1;31m重要警告!\033[0m # 绿色背景白色文字 echo -e \033[42;37m操作成功\033[0m # 闪烁效果(慎用) echo -e \033[5;31m紧急!!!\033[0m提示某些终端可能不支持所有 ANSI 特性建议在实际环境中测试效果。2. 动态进度条实现在长时间运行的任务中一个动态进度条能显著提升用户体验。纯echo就能实现各种进度显示效果。2.1 基础进度条#!/bin/bash # 进度条函数 progress_bar() { local duration${1:-10} # 默认10秒 local max50 # 进度条长度 local inc$((100/max)) # 每步增量 echo -n 进度: [ for ((i0; imax; i)); do echo -n # sleep $(echo scale2; $duration/$max | bc) done echo ] 完成 } # 使用示例 progress_bar 5 # 5秒完成进度条2.2 百分比进度显示#!/bin/bash show_progress() { local total${1:-100} local current0 while [ $current -lt $total ]; do current$((current 1)) percent$((current * 100 / total)) # 使用 \r 回到行首覆盖之前输出 echo -ne 处理中: ${percent}% [ # 绘制进度条 for ((i0; i50; i)); do if [ $i -lt $((percent / 2)) ]; then echo -n # else echo -n fi done echo -ne ]\r sleep 0.1 done echo # 换行 } show_progress 1002.3 旋转指示器对于不确定时长的任务旋转指示器是个好选择#!/bin/bash spinner() { local pid$! local delay0.1 local spinstr|/-\ while [ $(ps a | awk {print $1} | grep $pid) ]; do local temp${spinstr#?} printf 处理中... [%c] $spinstr local spinstr$temp${spinstr%$temp} sleep $delay printf \b\b\b\b\b\b\b\b\b\b\b\b done printf \b\b\b\b\b\b\b\b\b\b\b\b } # 使用示例 sleep 5 # 模拟长时间任务 spinner echo 任务完成3. 交互式菜单系统echo结合read可以创建简单的终端交互界面非常适合脚本菜单。3.1 基础菜单模板#!/bin/bash show_menu() { clear echo ┌──────────────────────────────┐ echo │ 系统管理工具 │ echo ├──────────────────────────────┤ echo │ 1. 查看系统信息 │ echo │ 2. 磁盘使用情况 │ echo │ 3. 内存使用情况 │ echo │ 4. 网络连接状态 │ echo │ 5. 退出 │ echo └──────────────────────────────┘ echo -n 请输入选择 [1-5]: } while true; do show_menu read choice case $choice in 1) echo -e \n系统信息: uname -a read -p 按回车键继续... ;; 2) echo -e \n磁盘使用: df -h read -p 按回车键继续... ;; 3) echo -e \n内存使用: free -h read -p 按回车键继续... ;; 4) echo -e \n网络连接: netstat -tuln read -p 按回车键继续... ;; 5) echo 退出系统... exit 0 ;; *) echo -e \n无效输入! sleep 1 ;; esac done3.2 带颜色的增强菜单结合之前学的颜色代码让菜单更美观#!/bin/bash # 颜色定义 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0m show_menu() { clear echo -e ${GREEN}┌──────────────────────────────┐${NC} echo -e ${GREEN}│${NC} ${BLUE}系统管理工具${NC} ${GREEN}│${NC} echo -e ${GREEN}├──────────────────────────────┤${NC} echo -e ${GREEN}│${NC} ${YELLOW}1.${NC} 查看系统信息 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}2.${NC} 磁盘使用情况 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}3.${NC} 内存使用情况 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}4.${NC} 网络连接状态 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${RED}5.${NC} 退出 ${GREEN}│${NC} echo -e ${GREEN}└──────────────────────────────┘${NC} echo -en ${BLUE}请输入选择 [1-5]: ${NC} } # 其余代码与基础菜单相同...3.3 多级菜单系统通过函数组织可以实现更复杂的多级菜单#!/bin/bash # 颜色定义 (同上) main_menu() { while true; do clear echo -e ${GREEN}┌──────────────────────────────┐${NC} echo -e ${GREEN}│${NC} ${BLUE}主菜单${NC} ${GREEN}│${NC} echo -e ${GREEN}├──────────────────────────────┤${NC} echo -e ${GREEN}│${NC} ${YELLOW}1.${NC} 系统信息 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}2.${NC} 磁盘管理 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}3.${NC} 网络工具 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${RED}4.${NC} 退出 ${GREEN}│${NC} echo -e ${GREEN}└──────────────────────────────┘${NC} echo -en ${BLUE}请输入选择 [1-4]: ${NC} read choice case $choice in 1) system_info_menu ;; 2) disk_menu ;; 3) network_menu ;; 4) exit 0 ;; *) echo -e ${RED}无效输入!${NC}; sleep 1 ;; esac done } system_info_menu() { while true; do clear echo -e ${GREEN}┌──────────────────────────────┐${NC} echo -e ${GREEN}│${NC} ${BLUE}系统信息菜单${NC} ${GREEN}│${NC} echo -e ${GREEN}├──────────────────────────────┤${NC} echo -e ${GREEN}│${NC} ${YELLOW}1.${NC} 显示内核版本 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}2.${NC} 显示操作系统信息 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${YELLOW}3.${NC} 显示CPU信息 ${GREEN}│${NC} echo -e ${GREEN}│${NC} ${RED}4.${NC} 返回主菜单 ${GREEN}│${NC} echo -e ${GREEN}└──────────────────────────────┘${NC} echo -en ${BLUE}请输入选择 [1-4]: ${NC} read choice case $choice in 1) uname -a; read -p 按回车键继续... ;; 2) lsb_release -a; read -p 按回车键继续... ;; 3) lscpu; read -p 按回车键继续... ;; 4) return ;; *) echo -e ${RED}无效输入!${NC}; sleep 1 ;; esac done } # 其他菜单函数类似... # 启动主菜单 main_menu这些高阶用法展示了echo命令远超简单文本输出的潜力。在实际脚本开发中合理运用这些技巧可以大幅提升脚本的交互性和用户体验。