一、颜色输出能提升脚本交互体验¶
原笔记专门整理了一组常见 ANSI 转义码,用于在终端中输出彩色文本。核心形式是:
echo -e "\e[1;31mThis is red text\e[0m"
这里:
\e[表示颜色控制开始1;31m表示红色粗体0m表示恢复默认样式
常见颜色里最实用的几种通常是:
\e[31m:红色\e[32m:绿色\e[33m:黄色\e[34m:蓝色\e[0m:重置
在脚本里,绿色常用来表示成功,红色常用来表示失败。
二、把颜色封装成函数比直接写转义码更好¶
原笔记最有价值的部分,是把颜色输出做成函数库文件:
#!/bin/bash
redecho() {
echo -ne "\e[5;31m"
echo -n "$@"
echo -e "\e[0m"
}
greenecho() {
echo -ne "\e[1;32m"
echo -n "$@"
echo -e "\e[0m"
}
blueecho() {
echo -ne "\e[1;34m"
echo -n "$@"
echo -e "\e[0m"
}
check_rc() {
command "$1"
if [ $? -eq 0 ]; then
greenecho "$1 命令执行成功"
else
redecho "$1 命令执行失败"
fi
}
调用时只需要:
. /server/scripts/devops-shell/32.color-func.sh
check_rc id
check_rc badcmd
这就是典型的“函数库化”思路:把通用能力抽出来,其他脚本直接复用。
三、图形化终端工具属于了解项¶
原笔记提到了 dialog,可以在终端中弹出文本框等界面:
yum install -y dialog
dialog --textbox /etc/hostname 80 80
不过课程也明确建议:实际工作里更常见的还是“颜色输出 + 清晰文本提示”,真正依赖 GUI 的 Shell 脚本并不多。
四、数组是批量处理相关数据的基础能力¶
原笔记把数组定义为“可以存放多个相关联内容的变量”。最基础的创建方式如下:
ip_array=(10.0.0.61 10.0.0.71 10.0.0.81)
echo ${ip_array[0]}
echo ${ip_array[2]}
输出全部元素:
echo ${ip_array[@]}
echo ${ip_array[*]}
统计数组长度:
echo ${#ip_array[@]}
echo ${#ip_array[*]}
对 Shell 自动化脚本来说,数组最常见的价值是:
- 保存一组主机
- 保存一组目录
- 保存一组待处理对象
五、数组如何赋值和遍历¶
原笔记整理了 3 种常见赋值方式:
- 批量直接赋值:
array=(a b c) - 逐个元素赋值:
array[0]=a read -a交互赋值
从文件读内容形成数组也很常见:
ip_list=(`cat ip.txt`)
echo ${ip_list[@]}
echo ${#ip_list[@]}
数组遍历推荐下面这种写法:
names=(web01 web02 db01 nfs01 backup)
for n in ${names[@]}
do
ping -c 1 -W 1 $n
done
如果确实需要按下标访问,再考虑 C 风格循环。
六、案例:读取多个数字后计算总和和平均值¶
原笔记里数组最完整的案例,是读取用户输入的一组数字,再计算总和与平均值:
#!/bin/bash
tmp_file=${0}_$$.txt
check_num() {
if [ "$num" = "q" ]; then
echo "输入完成,准备进行计算"
break
fi
if [[ ! $num =~ ^[0-9]+$ ]]; then
echo "输入异常,请重新输入数字"
continue
fi
}
read_num() {
while :
do
read -p "请逐个输入数字,完成后按q结束: " num
check_num
echo $num >> $tmp_file
done
}
calc_num() {
num_array=(`cat $tmp_file`)
sum=0
for n in ${num_array[@]}
do
let sum=sum+n
done
echo "总数:$sum"
echo "平均值:"
echo "$sum/${#num_array[@]}" | bc -l
}
main() {
read_num
calc_num
}
main
这个案例把数组、循环、正则校验和 bc 计算都串到了一起,综合性很强。
七、脚本编写习惯会直接影响后期维护成本¶
原笔记在 Debug 章节前先列出了几个值得长期坚持的习惯:
1、适当加注释。
2、尽量使用变量,不要到处硬编码。
3、尽量使用函数,把逻辑模块化。
4、关键步骤要有返回值和退出码。
5、参数与选项要先检查。
6、必要时通过 echo 输出关键过程。
7、注意缩进。
8、成对符号提前补全好,例如 ""、[]、{}。
这些内容看起来不“炫技”,却最能决定脚本能不能长期维护。
八、调试 Shell 脚本最实用的 4 种方法¶
原笔记给出的 Debug 方法非常贴近实际:
8.1 直接用 bash -x¶
bash -x script.sh
这是最常用也最直接的调试方式,会把执行过程一行行打印出来。
8.2 局部打开调试¶
如果脚本很大,可以只调试局部:
set -x
# 需要观察的代码
set +x
8.3 注释法和排除法¶
把函数或模块临时注释掉,逐步缩小问题范围。这种方法虽然朴素,但在大脚本里很有效。
8.4 输出关键变量¶
在关键节点输出变量值,观察脚本实际执行到了哪里、数据是否符合预期。
九、这一篇最值得真正带走的东西¶
把颜色输出、数组和调试方法放在一起看,会发现它们共同解决的是同一个问题:让脚本更容易被人使用,也更容易被人维护。
因此,最值得养成的长期习惯是:
- 通用能力函数化
- 批量数据数组化
- 排障过程可视化
脚本一旦进入多人协作、长期运行或定时任务场景,这些“辅助能力”就会比单次写对一个命令更重要。