PowerShell vs Bash
与 linux-essentials 对照、何时用哪种。
25 分钟
PowerShell vs Bash
同一任务在 PowerShell 与 Bash 上写法不同:前者管道传对象,后者管道传文本。CodeRoadMap 开发在 Windows(PowerShell),生产在 Linux(Bash)——两套都要会。
学习目标
- 对照常见运维任务的两种写法
- 判断何时用 PowerShell、何时用 Bash
- 与 linux-essentials 形成互补
核心内容
语法对照
| 任务 | Bash | PowerShell |
|---|---|---|
| 当前目录 | pwd | Get-Location |
| 列文件 | ls -la | Get-ChildItem -Force |
| 环境变量 | echo $PATH | $env:PATH |
| 管道过滤 | grep ERROR | Where-Object / Select-String |
| 条件 | if [ -f file ]; then | if (Test-Path file) { |
| 成功链 | cmd1 && cmd2 | cmd1; if ($?) { cmd2 } |
PowerShell 7+ 支持 && / ||,但旧版 5.1 不支持。
同一排查:端口与健康检查
# Bash(linux-shell)
ss -tlnp | grep -E '8080|3000'
curl -s http://127.0.0.1:8080/actuator/health
# PowerShell
Get-NetTCPConnection -LocalPort 8080,3000 -State Listen -ErrorAction SilentlyContinue
Invoke-RestMethod http://127.0.0.1:8080/actuator/health
Bash 用 curl + grep;PowerShell 原生 cmdlet 直接返回对象。
脚本扩展名与 shebang
| Bash | PowerShell | |
|---|---|---|
| 扩展名 | .sh | .ps1 |
| 首行 | #!/bin/bash | 无 shebang(或 #!/usr/bin/env pwsh) |
| 本站示例 | start-backend.sh | sync-courses.ps1 |
.bat 是 CMD 批处理(如 package-prod.bat),不是 PowerShell,但常与 .ps1 配合。