作为IT工程师,在编写Bash脚本时经常会遇到一些常见陷阱。以下是Bash编程中最容易犯的错误:
# 错误示范
var=hello
echo $var_world # 试图输出"hello world",但实际会输出空值
# 正确做法
echo ${var}_world
# 错误示范
if [ $var = "hello" ]; then # 当$var为空时会导致语法错误
echo "empty"
fi
# 正确做法
if [ "$var" = "hello" ]; then
echo "not empty"
fi
# 错误示范
cd /some/directory
rm file.txt # 如果cd失败,可能会删除错误位置的文件
# 正确做法
cd /some/directory || exit 1
rm file.txt
# 错误示范
for file in $(ls); do
rm "$file" # 如果文件名包含空格会出错
done
# 正确做法
for file in *; do
rm "$file"
done
# 错误示范
count=0
cat file.txt | while read line; do
((count++))
done
echo $count # 输出0,因为管道创建了子shell
# 正确做法
count=0
while read line; do
((count++))
done < file.txt
echo $count
# 错误示范
filename="my file.txt"
rm $filename # 会尝试删除"my"和"file.txt"两个文件
# 正确做法
rm "$filename"
# 过时做法
output=`command`
# 现代做法
output=$(command) # 更易读且支持嵌套
# 不安全的脚本
#!/bin/bash
command1
command2
# 更安全的脚本
#!/bin/bash
set -euo pipefail
command1
command2
# 错误示范
if [ $count > 10 ]; then # 这是字符串比较,且会创建文件
echo "big"
fi
# 正确做法
if [ $count -gt 10 ]; then
echo "big"
fi
# 缺少shebang可能导致脚本在不同shell中行为不一致
#!/bin/bash
# 脚本内容...
避免这些常见错误可以显著提高Bash脚本的可靠性和可维护性。