Linux脚本语法基础与进阶
Linux脚本(Shell脚本)是自动化任务、系统管理和日常运维的重要工具,掌握其语法不仅能提高工作效率,还能深入理解Linux系统的运行机制,本文将从基础语法、控制结构、函数定义、文件操作及调试技巧等方面,系统介绍Linux脚本的核心内容。

脚本基础与变量定义
Linux脚本通常以#!/bin/bash开头,指定解释器为Bash,变量是脚本的核心,无需声明类型,直接通过name="value"定义,使用时需加符号,如echo $name,变量分为环境变量(如$PATH)和自定义变量,环境变量可通过export命令导出,供子进程使用。
特殊变量:$0表示脚本名,$1-$9表示位置参数,为参数个数,和分别表示所有参数(整体引用)和所有参数(独立引用),为当前进程ID。
#!/bin/bash echo "脚本名: $0" echo "第一个参数: $1" echo "参数总数: $#"
条件判断与逻辑运算
条件判断是脚本逻辑控制的基础,test命令或[](需与条件间加空格)用于测试表达式,常见测试类型包括:
- 文件测试:
-e(存在)、-f(普通文件)、-d(目录)、-r(可读)等。 - 数值比较:
-eq(等于)、-ne(不等于)、-gt(大于)等。 - 字符串比较:(等于)、(不等于)、
-z(空字符串)等。
逻辑运算符包括&&(与)、(或)、(非)。
if [ -f $1 ] && [ -r $1 ]; then
echo "文件存在且可读"
else
echo "文件不存在或不可读"
fi
循环结构与流程控制
循环用于重复执行任务,Bash支持for、while和until循环。
for循环:遍历列表或文件名通配符。

for file in *.txt; do
echo "处理文件: $file"
done
while循环:条件为真时持续执行。
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
((count++))
done
until循环:条件为假时持续执行,与while相反。
break和continue可控制循环流程:break跳出当前循环,continue跳过本次循环剩余语句。
函数定义与调用
函数封装可复用代码,格式为:
function 函数名() {
命令序列
[return 值] # 返回值可选,默认为最后一条命令的退出状态
}
调用函数直接写函数名,通过获取返回值。
add() {
echo $(( $1 + $2 ))
}
result=$(add 3 5)
echo "结果: $result"
文件操作与文本处理
脚本常需处理文件和文本,常用命令包括:

- 重定向:
>(覆盖写入)、>>(追加写入)、<(输入重定向)。 - 管道:将前一个命令的输出作为后一个命令的输入,如
ls -l | grep txt。 - 文本处理工具:
grep:匹配文本,如grep "error" log.txt。sed:流编辑器,用于替换、删除行,如sed 's/old/new/g' file.txt。awk:格式化文本处理,如awk '{print $1, $3}' file.txt打印第一和第三列。
参数扩展与字符串处理
Bash支持强大的参数扩展功能:
${var:-default}:若var未设置或为空,则使用默认值。${var#pattern}:从开头删除最短匹配pattern的子串。${var##pattern}:从开头删除最长匹配pattern的子串。${var/pattern/replacement}:替换第一个匹配pattern的子串。
name=${name:-"默认用户"}
echo ${name#user*} # 删除"user"开头的字符
调试与错误处理
调试脚本是提升可靠性的关键:
- 使用
-x选项逐行执行并打印命令,如bash -x script.sh。 - 使用
set -e在命令失败时退出脚本,set -u引用未定义变量时报错。 - 错误处理可通过
trap命令捕获信号,如trap 'echo "发生错误"' ERR。
实战示例:备份脚本
以下是一个简单的备份脚本,结合了上述知识点:
#!/bin/bash
source_dir="/home/user/documents"
backup_dir="/backup"
date=$(date +%Y%m%d)
backup_file="backup_$date.tar.gz"
# 检查源目录是否存在
if [ ! -d "$source_dir" ]; then
echo "错误:源目录不存在"
exit 1
fi
# 创建备份
tar -czf "$backup_dir/$backup_file" "$source_dir"
if [ $? -eq 0 ]; then
echo "备份成功: $backup_file"
else
echo "备份失败"
exit 1
fi
Linux脚本语法灵活而强大,从基础变量到复杂流程控制,掌握这些内容能显著提升自动化任务的能力,通过不断练习和实战,逐步积累经验,最终实现高效、稳定的脚本编写。
















