这是一段机器翻译的文本,可能包含错误!
如果你已经第三次执行相同的任务,那么是时候自动化它了。脚本编写是指让机器为你完成枯燥的工作,更快且不会忘记任何事情。
为什么自动化?
IT 运维中的一些任务经常需要执行:
- 更新服务器
- 创建用户
- 备份
- 在更新后重启服务
- 检查服务是否正在运行
每次手动执行这些任务会耗费时间,并且很容易忘记一个步骤。脚本每次都以相同的方式执行,不会抱怨。
Bash: Linux 中的脚本编程
Bash 是大多数 Linux 发行版中的 shell(终端),它也可以运行脚本。Bash 脚本只是一个包含按顺序执行的命令的文本文件。
你的第一个脚本
创建一个名为 oppdater.sh 的文件:
#!/bin/bash
# 更新软件包列表并安装更新
echo "更新系统..."
sudo apt update
sudo apt upgrade -y
echo "完成!"
使文件可执行并运行:
chmod +x oppdater.sh
./oppdater.sh
# 更改权限使脚本可执行
# 运行脚本
#!/bin/bash
第一行被称为 shebang。它告诉操作系统该文件应该使用 Bash 运行。如果没有它,系统不知道哪个程序应该解释该脚本。
变量与输入
#!/bin/bash
BRUKERNAVN=$1
if [ -z "$BRUKERNAVN" ]; then
echo "用法: ./lag_bruker.sh <用户名>"
exit 1
fi
sudo adduser "$BRUKERNAVN"
sudo usermod -aG sudo "$BRUKERNAVN"
echo "用户 $BRUKERNAVN 已创建并拥有 sudo 权限。"
此脚本接收一个用户名作为参数(`$1` 是第一个参数)。 如果您运行 `./lag_bruker.sh ola`,它将创建用户 `ola` 并授予其 sudo 权限。
有用的 Bash 概念
| 概念 | 示例 | 它做什么 |
|---|---|---|
| 变量 | NAVN="Ola" | 存储一个值 |
| 参数 | $1, $2 | 来自命令行输入 |
| If 检查 | if [ -f "fil.txt" ]; then | 检查文件是否存在 |
| For 循环 | for f in *.log; do | 对匹配的每个文件执行某些操作 |
| 管道 | cat logg.txt \| grep "ERROR" | 将一个命令的输出发送到另一个命令 |
PowerShell: Windows 上的脚本
PowerShell 是 Windows 对 Bash 的回应,但它更面向对象。它处理对象而不是仅仅处理文本,这使得它在 Windows 系统管理方面功能强大。
示例:检查磁盘空间
# 检查可用磁盘空间
Get-PSDrive -PSProvider FileSystem | Select-Object Name,
@{Name="Brukt (GB)"; Expression={[math]::Round($_.Used / 1GB, 2)}},
@{Name="Ledig (GB)"; Expression={[math]::Round($_.Free / 1GB, 2)}}
示例:使用 Winget 安装软件
# 安装多个程序一次性
winget install Mozilla.Firefox
winget install Microsoft.VisualStudioCode
winget install Git.Git
winget install Python.Python.3.12
这比手动下载和安装所有内容快得多。你可以将列表保存在脚本中,并在每次设置新机器时运行它。
任务 1 - 创建一个更新脚本
编写一个 Bash 脚本,该脚本:
- 更新软件包列表
- 安装所有可用的更新
- 重启 Nginx(或您正在运行的任何其他服务)
- 完成后打印一条消息
在您的虚拟机之一上运行它,并查看它是否有效。
任务 2 - 自动化机器设置
编写一个 PowerShell 脚本 (.ps1) 或一个简单的 winget install 命令列表,用于在新电脑上安装所有需要的程序。 考虑:
- 你总是安装哪些程序?
- 你是否也可以使用脚本配置一些设置?
下次设置机器时,只需运行脚本,而无需花费一个小时进行手动安装。
总结
- 如果你做某事超过两次,请考虑自动化它
- Bash (Linux) 和 PowerShell (Windows) 是最常用的脚本工具
- Bash 脚本是包含按顺序执行的命令的文本文件
- PowerShell 处理对象,并且非常适合 Windows 管理
- 变量、参数、if 检查和循环是构建块最重要的部分