爱极客专注分享-好玩的docker应用-源码分享

Linux命令手册:高级脚本编写和自动化任务

Linux命令手册:高级脚本编写和自动化任务

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!"
  1. 字符串操作

字符串操作在脚本中非常常见。以下是一些基本的字符串操作:

# 字符串连接
full_name="Hello, World"
echo "$full_name!"
# 获取字符串长度
length=${#full_name}
echo "Length of the string: $length"
# 提取子字符串
substring=${full_name:0:5}
echo "Substring: $substring"
  1. 数学运算

可以使用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"
# 使用let
let result=5+3
echo "Result with let: $result"
  1. 文件操作

文件操作是脚本中的常见任务,包括读写文件、检查文件是否存在等:

# 创建文件并写入内容
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
  1. 条件判断

(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=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done

9.函数定义

#!/bin/bash
# 定义函数
function greet {
    echo "Hello, $1!"
}


# 调用函数
greet "World"
  1. 输入和输出

输入和输出操作在脚本中也很常见:

# 从标准输入读取数据
echo "Enter your name:"
read name
echo "Hello, $name!"
# 输出重定向
ls -l > output.txt  # 将输出重定向到文件
ls -l 2> error.txt  # 将错误输出重定向到文件
  1. 环境变量

环境变量在脚本中用于存储全局信息,可以通过export命令设置:

# 设置环境变量
export MY_VARIABLE="SomeValue"
# 使用环境变量
echo "The value of MY_VARIABLE is: $MY_VARIABLE"
  1. 异常信号处理

用于在脚本中处理中断和其他异常事件:

# 捕获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 表示每小时执行一次数据备份。
  1. 使用 at 命令
# 安装at服务
sudo apt install at
# 设置一次性任务
echo "/path/to/your_script.sh" | at 2:00 PM
  1. 日志管理
#!/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使用情况。如下图所示:

Linux命令手册:高级脚本编写和自动化任务

3.调试和优化

使用set -x开启调试模式,逐行显示执行的命令。

#!/bin/bash
set -x
# 脚本内容...

注意:为避免不必要的子Shell调用,尽量使用内置命令和函数。

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容