Bash 脚本是一种用于自动化任务、管理系统和运行命令的强大工具。以下是 Bash 脚本的基本语法、结构和常用功能的详细介绍。
Bash 脚本的基本结构
脚本文件的格式
- 文件开头指定解释器:使用
#!/bin/bash
告诉系统脚本应该由 Bash 解释器执行。
1 2 3
| #!/bin/bash
echo "Hello, World!"
|
- 保存文件:将文件保存为
.sh
后缀,例如 script.sh
。
- 赋予执行权限:
注释
- 多行注释:一般用
<<COMMENT
和 COMMENT
。
1 2 3 4
| : <<'COMMENT' 这是多行注释 可以写多行内容 COMMENT
|
变量
定义变量
使用变量
1 2
| echo "Name: $name" echo "Age: $age"
|
读取用户输入
1 2
| read -p "Enter your name: " user_name echo "Hello, $user_name!"
|
环境变量
1 2
| echo "Home directory: $HOME" echo "Shell: $SHELL"
|
条件判断
if-else 语法
1 2 3 4 5 6 7
| if [ 条件 ]; then echo "条件为真" else echo "条件为假" fi
|
1 2 3 4 5 6 7
| #!/bin/bash read -p "输入一个数: " num if [ $num -gt 10 ]; then echo "数值大于 10" else echo "数值小于或等于 10" fi
|
循环
for 循环
1 2 3
| for i in 1 2 3 4 5; do echo "数字: $i" done
|
1 2 3
| for file in *.sh; do echo "文件: $file" done
|
while 循环
1 2 3 4 5
| count=1 while [ $count -le 5 ]; do echo "计数: $count" count=$((count + 1)) done
|
until 循环
1 2 3 4 5
| count=1 until [ $count -gt 5 ]; do echo "计数: $count" count=$((count + 1)) done
|
函数
定义和调用函数
1 2 3 4 5
| function greet() { echo "Hello, $1!" }
greet "Alice"
|
1 2 3 4 5 6 7
| function add() { result=$(( $1 + $2 )) echo $result }
sum=$(add 5 10) echo "结果是: $sum"
|
文件操作
检查文件或目录
1 2 3 4 5 6 7 8
| file="test.txt" if [ -f "$file" ]; then echo "$file 是一个文件" elif [ -d "$file" ]; then echo "$file 是一个目录" else echo "$file 不存在" fi
|
- 常用的文件测试符:
测试符 |
描述 |
-f |
是否为普通文件 |
-d |
是否为目录 |
-e |
是否存在 |
-r |
是否可读 |
-w |
是否可写 |
-x |
是否可执行 |
读取文件内容
1 2 3 4
| file="test.txt" while read line; do echo $line done < "$file"
|
重定向输出
1
| echo "Hello, World!" > output.txt
|
1
| echo "追加内容" >> output.txt
|
运算
整数运算
1 2 3 4
| a=10 b=5 sum=$((a + b)) echo "Sum: $sum"
|
浮点运算
1 2
| result=$(echo "scale=2; 10 / 3" | bc) echo "结果: $result"
|
数组
定义数组
1
| arr=("apple" "banana" "cherry")
|
访问数组元素
获取数组长度
遍历数组
1 2 3
| for item in "${arr[@]}"; do echo $item done
|
高级功能
参数传递
1 2 3 4 5
| #!/bin/bash echo "第一个参数: $1" echo "第二个参数: $2" echo "所有参数: $@" echo "参数个数: $#"
|
条件表达式
-
数值比较:
运算符 |
描述 |
-eq |
等于 |
-ne |
不等于 |
-gt |
大于 |
-lt |
小于 |
-ge |
大于等于 |
-le |
小于等于 |
-
字符串比较:
运算符 |
描述 |
= |
等于 |
!= |
不等于 |
-z |
字符串是否为空 |
-n |
字符串是否非空 |
捕获命令执行结果
1 2
| current_date=$(date) echo "当前时间: $current_date"
|
示例脚本
备份脚本
1 2 3 4 5 6 7 8 9
| #!/bin/bash backup_dir="/backup" src_dir="/home/user" timestamp=$(date "+%Y%m%d_%H%M%S")
mkdir -p $backup_dir tar -czf $backup_dir/backup_$timestamp.tar.gz $src_dir
echo "备份完成: $backup_dir/backup_$timestamp.tar.gz"
|
检测服务运行状态
1 2 3 4 5 6 7 8 9
| #!/bin/bash service="nginx"
if systemctl is-active --quiet $service; then echo "$service 正在运行" else echo "$service 未运行,尝试启动..." sudo systemctl start $service fi
|
通过掌握这些 Bash 脚本语法和功能,您可以轻松编写脚本来自动化日常任务或实现复杂的系统管理功能!