使用 Bash 和 PowerShell 进行脚本编写

Skip to content

这是一段机器翻译的文本,可能包含错误!

如果你已经第三次执行相同的任务,那么是时候自动化它了。脚本编写是指让机器为你完成枯燥的工作,更快且不会忘记任何事情。

为什么自动化?

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

这比手动下载和安装所有内容快得多。你可以将列表保存在脚本中,并在每次设置新机器时运行它。

Easy 任务 1 - 创建一个更新脚本

编写一个 Bash 脚本,该脚本:

  1. 更新软件包列表
  2. 安装所有可用的更新
  3. 重启 Nginx(或您正在运行的任何其他服务)
  4. 完成后打印一条消息

在您的虚拟机之一上运行它,并查看它是否有效。

Easy 任务 2 - 自动化机器设置

编写一个 PowerShell 脚本 (.ps1) 或一个简单的 winget install 命令列表,用于在新电脑上安装所有需要的程序。 考虑:

  • 你总是安装哪些程序?
  • 你是否也可以使用脚本配置一些设置?

下次设置机器时,只需运行脚本,而无需花费一个小时进行手动安装。

总结

  • 如果你做某事超过两次,请考虑自动化它
  • Bash (Linux) 和 PowerShell (Windows) 是最常用的脚本工具
  • Bash 脚本是包含按顺序执行的命令的文本文件
  • PowerShell 处理对象,并且非常适合 Windows 管理
  • 变量、参数、if 检查和循环是构建块最重要的部分