Bash 脚本基础:变量、循环与条件判断
Bash 脚本基础:变量、循环与条件判断
Bash(Bourne Again Shell)是 Linux/Unix 系统中最常用的命令行 shell,也是 shell 脚本编程的基础。掌握 Bash 变量、循环和条件判断的用法,能够帮助你自动化日常运维任务、编写部署脚本、处理批量文件等。本篇介绍 Bash 脚本的基础语法和常用技巧。
变量
# 变量定义(等号两侧不能有空格)
name="张三"
age=28
使用变量(加 $ 符号)
echo "姓名: $name, 年龄: $age"
只读变量(常量)
readonly PI=3.14159
删除变量
unset name
特殊变量
$0 # 脚本名称
$1-$9 # 第1-9个参数
$# # 参数个数
$@ # 所有参数(数组形式)
$? # 上一个命令的退出状态(0为成功)
$$ # 当前进程ID
字符串处理
str="Hello, World"
字符串长度
echo ${#str} # 12
子字符串
echo ${str:0:5} # Hello
字符串拼接
greeting="Hello"
name="张三"
full="$greeting, $name!"
字符串替换
echo ${str/World/China} # Hello, China
echo ${str//o/O} # HellO, WOrld(全局替换)
数组
# 定义数组
colors=("red" "green" "blue")
fruits=([0]="apple" [1]="banana" [2]="orange")
访问元素
echo ${colors[0]} # red
echo ${colors[@]} # 所有元素
echo ${#colors[@]} # 数组长度
追加元素
colors+=("yellow")
关联数组(需声明)
declare -A user
user["name"]="张三"
user["email"]="zhang@example.com"
条件判断
# 文件测试
if [ -f "/path/to/file" ]; then
echo "是普通文件"
elif [ -d "/path/to/file" ]; then
echo "是目录"
fi
常用文件测试
-e file # 文件存在
-f file # 普通文件
-d file # 目录
-r/w/x file # 读写执行权限
-s file # 文件非空
字符串比较
if [ "$str1" = "$str2" ]; then
echo "相等"
fi
数值比较(使用 -eq -lt -gt 等)
if [ "$age" -ge 18 ]; then
echo "成年"
fi
循环
# for 循环(遍历列表)
for color in red green blue; do
echo "Color: $color"
done
for 循环(C风格)
for ((i=0; i<5; i++)); do
echo "i = $i"
done
while 循环
count=0
while [ $count -lt 5 ]; do
echo "Count: $count"
((count++))
done
until 循环(条件为假时执行)
until [ $count -ge 10 ]; do
echo $count
((count++))
done
遍历文件
for file in /path/*.txt; do
echo "Processing: $file"
done
函数
# 函数定义
function greet() {
echo "Hello, $1!"
}
greet "张三"
返回值(只能返回 0-255)
function get_sum() {
local a=$1
local b=$2
return $((a + b))
}
get_sum 3 5
echo "Result: $?"
注意事项
- 变量赋值时等号两侧不能有空格,否则会被当作命令执行
- 变量引用时建议加双引号,避免空变量导致语法错误
- 数组索引从 0 开始
- 条件判断使用
[ ],两端需要空格;高级比较使用[[ ]] - 函数内访问函数局部变量使用 local 关键字
Bash 是系统管理者的必备技能。掌握基础语法后,可以逐步学习高级特性如进程替换、协程、trap 陷阱等,构建强大的自动化脚本。