使用 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 运行。如果没有它,系统不知道哪个程序应该解释该脚本。

变量和输入

Variabler er sentrale i all programmering. De lar oss lagre data som kan endres under kjøring av programmet. I Python defineres variabler enkelt ved å bruke et navn og tilordne en verdi til det ved hjelp av =.

navn = "Ola Nordmann"
alder = 30

Input fra brukeren er også viktig. Funksjonen input() lar oss hente data fra brukeren via tastaturet. Denne funksjonen returnerer alltid en streng, så vi må konvertere den til riktig datatype hvis nødvendig.

navn = input("Skriv inn navnet ditt: ")
alder = int(input("Skriv inn alderen din: "))
print(f"Hei, {navn}! Du er {alder} år gammel.")

Husk at int() konverterer strengen til et heltall. Hvis brukeren skriver inn noe som ikke kan konverteres til et heltall, vil programmet krasje. Det er derfor viktig å håndtere feil, noe vi kommer tilbake til senere.

#!/bin/bash
BRUKERNAVN=$1

if [ -z "$BRUKERNAVN" ]; then
    echo "用法: ./lag_bruker.sh <brukernavn>" # 用法: ./lag_bruker.sh <brukernavn>
    exit 1
fi

sudo adduser "$BRUKERNAVN"
sudo usermod -aG sudo "$BRUKERNAVN"
echo "用户 $BRUKERNAVN 创建,具有 sudo 访问权限。" # 用户 $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 系统管理方面功能强大。

示例:检查磁盘空间

Dette eksemplet viser hvordan du kan sjekke hvor mye diskplass som er ledig på systemet ditt. Du kan bruke kommandoen df -h for å vise diskbruken i et lesbart format.

df -h

Denne kommandoen vil vise en liste over alle monterte filsystemer, samt hvor mye plass som er brukt og hvor mye som er ledig.

Du kan også bruke kommandoen du -h for å vise diskbruken for en bestemt mappe. For eksempel, for å vise diskbruken for mappen /home/brukernavn, kan du kjøre:

du -h /home/brukernavn

Denne kommandoen vil vise hvor mye plass mappen /home/brukernavn og alle undermappene bruker.

该示例展示了如何检查系统上可用的磁盘空间。您可以使用 df -h 命令以可读格式显示磁盘使用情况。

df -h

该命令将显示所有已挂载文件系统的列表,以及已用空间和可用空间。

您还可以使用 du -h 命令来显示特定文件夹的磁盘使用情况。例如,要显示 /home/brukernavn 文件夹的磁盘使用情况,您可以运行:

du -h /home/brukernavn

该命令将显示 /home/brukernavn 文件夹及其所有子文件夹使用的空间。

# 检查可用磁盘空间
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 er et pakkehåndteringsverktøy for Windows. Det lar deg installere og administrere programvare fra kommandolinjen.

Fordeler med å bruke Winget:

  • Enkel å bruke
  • Automatisering av installasjonsprosessen
  • Sentralisert kilde for programvare

Installere Winget:

Winget er inkludert i Windows 10 (versjon 1709 og nyere) og Windows 11. For å sjekke om du har Winget installert, åpne kommandolinjen eller PowerShell og skriv:

winget --version

Hvis Winget ikke er installert, kan du laste det ned fra https://github.com/microsoft/winget.

Eksempel på bruk:

For å installere 7-Zip med Winget, skriv:

winget install 7zip.7zip

For å søke etter programvare, skriv:

winget search 7zip

# 安装多个程序一次性
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 检查和循环是构建块最重要的部分