基本语法
以下是 Shell 脚本 的基本语法整理,涵盖了常用的变量定义、条件判断、循环结构、函数、I/O 操作以及一些实用的命令和脚本示例。
一、Shell 脚本的基本结构
1.1 脚本头部
Shell 脚本的第一行通常是 shebang,指定脚本的解释器。
1.2 注释
- 单行注释用
#
开头。
- 没有多行注释,通常使用
: '...'
或 <<COMMENT ... COMMENT
模拟。
1 2 3 4 5 6 7 8 9 10 11
|
: ' 这是 多行 注释 '
<<COMMENT 这也是多行注释 COMMENT
|
二、变量
2.1 变量定义
2.2 变量引用
使用 $变量名
或 ${变量名}
。
1
| echo "Name: $name, Age: ${age}"
|
2.3 变量类型
- 局部变量: 仅在当前脚本中有效。
- 环境变量: 使用
export
定义,供子进程继承。
1
| export PATH=$PATH:/my/custom/path
|
2.4 只读变量
使用 readonly
。
三、运算
3.1 算术运算
使用 expr
或 $(( ))
。
1 2 3 4 5 6 7 8 9 10
| x=10 y=5
result=`expr $x + $y` echo $result
result=$((x + y)) echo $result
|
3.2 比较运算
运算符 |
描述 |
-eq |
等于 |
-ne |
不等于 |
-lt |
小于 |
-le |
小于或等于 |
-gt |
大于 |
-ge |
大于或等于 |
1 2 3
| if [ $x -gt $y ]; then echo "$x is greater than $y" fi
|
3.3 字符串比较
运算符 |
描述 |
= |
等于 |
!= |
不等于 |
-z |
字符串为空 |
-n |
字符串非空 |
1 2 3
| if [ "$name" = "Alice" ]; then echo "Hello, Alice" fi
|
四、条件判断
4.1 if-else 语句
1 2 3 4 5 6 7
| if [ 条件 ]; then elif [ 条件 ]; then else fi
|
示例
1 2 3 4 5
| if [ $age -ge 18 ]; then echo "Adult" else echo "Minor" fi
|
4.2 文件测试
运算符 |
描述 |
-e |
文件存在 |
-f |
是普通文件 |
-d |
是目录 |
-r |
可读 |
-w |
可写 |
-x |
可执行 |
1 2 3
| if [ -f "/path/to/file" ]; then echo "File exists" fi
|
五、循环结构
5.1 for 循环
1 2 3
| for var in list; do done
|
示例
1 2 3
| for i in 1 2 3 4 5; do echo "Number: $i" done
|
5.2 while 循环
示例
1 2 3 4 5
| counter=0 while [ $counter -lt 5 ]; do echo "Counter: $counter" counter=$((counter + 1)) done
|
5.3 until 循环
示例
1 2 3 4 5
| counter=0 until [ $counter -ge 5 ]; do echo "Counter: $counter" counter=$((counter + 1)) done
|
六、函数
6.1 函数定义
6.2 参数与返回值
$1
、$2
等为函数参数。
- 使用
return
返回状态码。
1 2 3 4 5 6
| greet() { echo "Hello, $1!" return 0 }
greet "Alice"
|
七、I/O 操作
7.1 输出
使用 echo
或 printf
。
1 2
| echo "Hello, World!" printf "Name: %s, Age: %d\n" "Alice" 25
|
7.2 输入
使用 read
。
1 2 3
| echo "Enter your name:" read name echo "Hello, $name!"
|
八、脚本调试
8.1 调试模式
使用 -x
查看执行过程。
8.2 显示错误
使用 -e
让脚本在错误发生时退出。
九、常用命令
命令 |
描述 |
ls |
列出目录内容 |
cd |
切换目录 |
pwd |
显示当前目录 |
cp |
复制文件或目录 |
mv |
移动或重命名文件 |
rm |
删除文件或目录 |
chmod |
修改文件权限 |
grep |
搜索文件中的文本 |
awk |
处理文本并生成格式化输出 |
sed |
文本替换 |
十、脚本示例
10.1 备份文件
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash
backup_dir="/backup" src_dir="/data"
if [ ! -d $backup_dir ]; then mkdir -p $backup_dir fi
cp -r $src_dir/* $backup_dir echo "Backup completed!"
|
10.2 批量重命名文件
1 2 3 4 5 6 7
| #!/bin/bash
for file in *.txt; do mv "$file" "${file%.txt}.bak" done
echo "Files renamed!"
|
总结
- 基本语法:掌握变量、条件判断、循环、函数等基本语法。
- 文件与I/O操作:熟悉文件测试、输入输出以及文件处理命令。
- 调试与优化:使用调试模式和错误处理工具提高脚本质量。
- 实用命令:灵活使用
grep
、awk
、sed
等命令处理数据。
通过熟练掌握这些基础和技巧,你将能快速编写高效的 Shell 脚本来处理自动化任务。
高级特性
以下是 Shell 脚本的 高级特性 整理,包括高级变量操作、进阶函数特性、数组与关联数组、流程控制、并发与异步处理、文件处理、调试和性能优化等内容。
一、变量与字符串高级操作
1.1 变量替换与默认值
语法 |
描述 |
示例 |
${var:-default} |
如果变量未定义或为空,则返回 default |
echo ${name:-"Default Name"} |
${var:=default} |
如果变量未定义或为空,则赋值 default |
echo ${name:="Default Name"} |
${var:+replacement} |
如果变量已定义且非空,则返回 replacement |
echo ${name:+Defined} |
${var:?error message} |
如果变量未定义或为空,则打印错误信息并退出 |
echo ${name:?"Error: name required"} |
1.2 字符串操作