Linux下编写脚本
在 Linux 中编写脚本通常指的是编写 Shell 脚本(使用 Bash 或其他 Shell 解释器),用于自动化任务或执行系统操作。以下是编写和运行 Shell 脚本的详细步骤:
1. 创建脚本文件
- 使用文本编辑器(如 `nano`、`vim` 或 `gedit`)创建一个新文件,文件名通常以 `.sh` 结尾(非强制,但便于识别)。
```bash
nano my_script.sh
```
2. 编写脚本内容
基本结构
- **首行指定解释器**:使用 `#!/bin/bash`(称为 **shebang**),告诉系统使用 Bash 解释器执行脚本。
- **脚本内容**:逐行编写命令,就像在终端中直接输入一样。
示例脚本
```bash
#!/bin/bash
# 这是一个注释
echo "Hello, World!" # 输出文本
# 定义变量
name="Linux用户"
current_time=$(date +"%Y-%m-%d %H:%M:%S") # 命令替换(获取当前时间)
# 使用变量
echo "当前时间:$current_time"
echo "你好,$name!"
# 条件判断
if [ -f "/etc/passwd" ]; then
echo "文件 /etc/passwd 存在!"
else
echo "文件不存在。"
fi
# 循环示例
for i in {1..5}; do
echo "循环次数:$i"
done
```
3. 赋予脚本执行权限
- 默认新建文件没有执行权限,需通过 `chmod` 命令添加权限:
```bash
chmod +x my_script.sh
```
4. 运行脚本
- **直接运行**(需在脚本所在目录):
```bash
./my_script.sh
```
- **通过解释器运行**(无需权限):
```bash
bash my_script.sh
```
关键语法和技巧
1. 变量
- 定义变量:`变量名=值`(等号两侧不能有空格)。
- 使用变量:`$变量名` 或 `${变量名}`。
2. 命令替换
- 将命令的输出赋值给变量:
```bash
result=$(ls -l) # 获取 ls -l 的结果
```
3. 输入输出
- **读取用户输入**:
```bash
read -p "请输入你的名字:" username
echo "你好,$username!"
```
- **重定向输出**:
```bash
echo "内容" > file.txt # 覆盖写入
echo "追加" >> file.txt # 追加写入
```
4. 条件判断
- 基本语法:
```bash
if [ 条件 ]; then
# 命令
elif [ 其他条件 ]; then
# 命令
else
# 命令
fi
```
- 常用条件判断:
```bash
[ -f 文件路径 ] # 文件是否存在
[ -d 目录路径 ] # 目录是否存在
[ 值1 -eq 值2 ] # 数值是否相等
[ 字符串1 == 字符串2 ] # 字符串是否相等
```
5. 循环
- **for 循环**:
```bash
for 变量 in 列表; do
# 命令
done
```
- **while 循环**:
```bash
while [ 条件 ]; do
# 命令
done
```
6. 函数
- 定义和调用函数:
```bash
function greet() {
echo "你好,$1!" # $1 表示第一个参数
}
greet "Alice" # 调用函数并传参
```
调试脚本
- 使用 `-x` 参数跟踪脚本执行过程:
```bash
bash -x my_script.sh
```
实际应用示例
1. 自动备份文件
```bash
#!/bin/bash
backup_dir="/backup"
source_dir="/home/user/docs"
tar -czf "$backup_dir/docs_$(date +%Y%m%d).tar.gz" "$source_dir"
echo "备份完成!"
```
2. 批量重命名文件
```bash
#!/bin/bash
count=1
for file in *.txt; do
mv "$file" "document_$count.txt"
((count++))
done
```