Bash 脚本基础:变量、循环与条件判断

小飞兽 Linux 156 次阅读 2026-07-23

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 陷阱等,构建强大的自动化脚本。