01
脚本基础语法
—
Linux脚本通常使用Shell编程语言的语法。Shell是一种命令行解释器,它使用特定的语法来执行命令、控制流程以及进行文本处理等操作。最常用的Shell是Bash(Bourne Again Shell),因此大多数Linux脚本都是用Bash脚本语言编写的。
新建脚本文件:
echo "" > script.sh
给予脚本执行权限:
chmod +x script.sh
以下是Bash脚本中常用的一些语法和特性:
1.第一行
脚本的第一行指定了脚本解释器的路径。
#!/bin/bash
2.注释
注释以 # 开头,用于解释代码的作用。
# 定义变量 name="World" # 使用变量 echo "Hello, $name!"
3.变量
变量在脚本中用于存储数据。定义和使用变量的方式如下:
# 定义变量 name="World" # 使用变量 echo "Hello, $name!"
4. 字符串操作
字符串操作在脚本中非常常见。以下是一些基本的字符串操作:
# 字符串连接 full_name="Hello, World" echo "$full_name!" # 获取字符串长度 length=${#full_name} echo "Length of the string: $length" # 提取子字符串 substring=${full_name:0:5} echo "Substring: $substring"
5. 数学运算
可以使用expr、bc或let进行简单的数学运算
# 使用expr result=$(expr 5 + 3) echo "Result: $result" # 使用bc(支持浮点运算)result=$(echo "scale=2; 5.5 + 3.3" | bc) echo "Result with bc: $result" # 使用letlet result=5+3 echo "Result with let: $result"
6. 文件操作
文件操作是脚本中的常见任务,包括读写文件、检查文件是否存在等:
# 创建文件并写入内容 echo "This is a test file" > testfile.txt # 追加内容到文件 echo "Appending this line" >> testfile.txt # 读取文件内容 content=$(cat testfile.txt) echo "File content:" echo "$content" # 检查文件是否存在 if [ -f "testfile.txt" ]; then echo "File exists" else echo "File does not exist"fi
7. 条件判断
(1)if语句
#!/bin/bash if [ "$1" == "start" ]; then echo "Starting service..."elif [ "$1" == "stop" ]; then echo "Stopping service..." else echo "Usage: $0 {start|stop}" fi
(2)case语句
#!/bin/bash case "$1" in start) echo "Starting service..." ;; stop) echo "Stopping service..." ;; *) echo "Usage: $0 {start|stop}" ;;esac
8.循环结构
(1)for循环
#!/bin/bash # for循环 for i in {1..5}; do echo "Iteration $i" done
(2)while循环
#!/bin/bash # while循环 count=1while [ $count -le 5 ]; do echo "Count: $count" count=$((count + 1)) done
9.函数定义
#!/bin/bash
# 定义函数function greet {
echo "Hello, $1!"
}
# 调用函数
greet "World"
10. 输入和输出
输入和输出操作在脚本中也很常见:
# 从标准输入读取数据e cho "Enter your name:" read name echo "Hello, $name!" # 输出重定向 ls -l > output.txt # 将输出重定向到文件 ls -l 2> error.txt # 将错误输出重定向到文件
11. 环境变量
环境变量在脚本中用于存储全局信息,可以通过export命令设置:
# 设置环境变量 export MY_VARIABLE="SomeValue" # 使用环境变量 echo "The value of MY_VARIABLE is: $MY_VARIABLE"
12. 异常信号处理
用于在脚本中处理中断和其他异常事件:
# 捕获Ctrl+C信号 trap 'echo "Ctrl+C pressed. Exiting..."; exit' SIGINT # 无限循环(按Ctrl+C退出) while true; do echo "Running..." sleep 1 done
02
自动化任务
—
1. 计划任务:cron
# 编辑计划任务 crontab -e # 添加一个每天凌晨2点运行的脚本 0 2 * * * /path/to/your_script.sh
脚本参数说明:
基本语法:* * * * * [command]
每条命令由五个字段和一个命令组成: 第1个字段:分钟(0-59) 第2个字段:小时(0-23) 第3个字段:日期(1-31) 第4个字段:月份(1-12) 第5个字段:星期几(0-7,其中0和7都表示星期天)
特殊字符: , 表示多个值,例如 1,3,5。 - 表示一个范围,例如 1-5。 / 表示步长,例如 */10 表示每隔10分钟。
示例: * * * * * 表示每分钟执行一次 command 命令。建议测试时使用该命令。 0 2 * * * command 表示每天凌晨2点执行一次 command 命令。 30 18 * * 1 command 表示每周一的18:30执行一次 command 命令。 0 8 * * 1 rm /tmp/*.tmp 表示每周一早上8点清理临时文件。 0 * * * * /home/ht/backup.sh 表示每小时执行一次数据备份。
2. 使用 at 命令
# 安装at服务 sudo apt install at # 设置一次性任务 echo "/path/to/your_script.sh" | at 2:00 PM
3. 日志管理
#!/bin/bash # 将输出重定向到日志文件 exec > /path/to/logfile.log 2>&1 # 脚本内容 echo "Script started at: $(date)"
03
实际应用
—
1.备份资料
把 /home/ht/下载 目录内的资料全部压缩备份到 /backup 。
#!/bin/bash SOURCE_DIR="/home/ht/下载" BACKUP_DIR="/backup"DATE=$(date +%Y%m%d%H%M%S) # 创建备份 tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE_DIR echo "Backup completed: backup-$DATE.tar.gz"
2.系统监控脚本
#!/bin/bash # 检查磁盘空间 DISK_SPACE=$(df -h / | grep / | awk '{ print $5 }') echo "Disk space usage: $DISK_SPACE" # 检查内存使用情况 MEMORY_USAGE=$(free -m | grep Mem | awk '{ print $3 "MB" }') echo "Memory usage: $MEMORY_USAGE" # 检查CPU负载 LOAD_AVERAGE=$(uptime | awk '{print $10}') echo "Load average: $LOAD_AVERAGE"
执行后,显示当前的磁盘、内存、CPU使用情况。如下图所示:
3.调试和优化
使用set -x开启调试模式,逐行显示执行的命令。
#!/bin/bash set -x # 脚本内容...
注意:为避免不必要的子Shell调用,尽量使用内置命令和函数。