1. Shell编程核心命令详解
作为一名Linux系统管理员,Shell脚本是我日常工作中最常用的工具之一。今天我想分享一些Shell编程中最核心、最实用的命令和技巧,这些都是在实际运维工作中经过反复验证的"生存技能"。
1.1 echo命令的深度应用
echo可能是Shell中最基础但也最容易被低估的命令。除了简单的文本输出,它还有许多实用的高级用法:
bash复制# 输出带颜色的文本(非常实用于日志高亮)
echo -e "\033[31m错误信息\033[0m" # 红色错误提示
echo -e "\033[32m成功信息\033[0m" # 绿色成功提示
# 输出进度条(适用于长时间任务)
for i in {1..50}; do
echo -ne "进度: [${i}/50] \r"
sleep 0.1
done
echo "" # 换行
# 输出表格格式数据
echo -e "姓名\t年龄\t性别\n----\t----\t----\n张三\t25\t男"
注意:在脚本中使用
echo -e时,务必测试不同终端的兼容性。某些老旧的Shell版本可能不支持-e参数。
1.2 read命令的交互式技巧
read命令在编写交互式脚本时非常有用,下面分享几个我在实际工作中总结的技巧:
bash复制# 带超时的密码输入(安全敏感操作必备)
read -t 30 -s -p "请在30秒内输入密码: " password
if [ -z "$password" ]; then
echo -e "\n超时未输入!"
exit 1
fi
# 读取文件内容到数组(处理配置文件很实用)
declare -a config_lines
while IFS= read -r line; do
config_lines+=("$line")
done < config.txt
# 多变量同时读取(解析CSV数据时有用)
echo "张三,25,男" | IFS=, read name age gender
echo "姓名: $name, 年龄: $age, 性别: $gender"
经验:使用
IFS=可以保留行首和行尾的空格,这在处理某些特殊格式文件时非常关键。
1.3 printf的格式化输出艺术
printf比echo更适合精确控制输出格式,特别是在生成报表时:
bash复制# 生成对齐的表格数据
printf "%-20s %-10s %-10s\n" "姓名" "年龄" "工资"
printf "%-20s %-10d %-10.2f\n" "张三" 25 5800.5
printf "%-20s %-10d %-10.2f\n" "李四" 30 12500.75
# 输出进度百分比
for ((i=0; i<=100; i+=5)); do
printf "进度: [%-50s] %d%%\r" $(printf "%${i}s" | tr ' ' '#') $i
sleep 0.1
done
echo ""
1.4 test命令的条件判断实战
test命令(或[ ])是Shell条件判断的核心,分享一些容易踩坑的点:
bash复制# 字符串比较的坑
str="hello"
if [ "$str" = "hello" ]; then # 等号两边必须有空格
echo "字符串匹配"
fi
# 文件测试的实用技巧
file="/etc/passwd"
if [ -f "$file" -a -r "$file" ]; then # 文件存在且可读
echo "可以读取密码文件"
fi
# 数值比较的最佳实践
a=10; b=20
if (( a < b )); then # 使用双括号更直观
echo "$a 小于 $b"
