首页 > 解决方案 > 将 Shell 脚本转换为 PowerShell 脚本

问题描述

所以我有这个 Shell 脚本,我正在尝试转换为 PowerShell 脚本

“任务”是逐行读取文本文件并返回与参数中给出的名称相关的 4 个数字的平均值

文本文件:

.... ... . . . .
John Big 1 2 4 5
.... ... . . . .

例子:

if arg is "John Big" it should give back 3

外壳脚本:

while read -r fname lname a b c d;
do
  x="$fname $lname"

  if [ "$x" = "$1" ]
  then
    avg=$(( (a + b + c + d) / 4 ))
    echo $avg
    break
  fi
done <class.txt

电源外壳:

$TextFile = Get-Content .\class.txt
foreach($line in $TextFile){
   $fname,$lname,[int]$a,[int]$b,[int]$c,[int]$d =$line.split(' ')
   $x = "$fname $lname"
   $avg = (($a + $b + $c + $d) / 4)
   if($x = $args[0]){
    echo $avg
    break
  }
}

请帮我编辑这个 PowerShell 脚本

标签: bashpowershell

解决方案


您在 if-condition 中使用了 assignment 而不是comparison。因此,当您将其替换=-eq一切正常时:

$TextFile = Get-Content .\class.txt
foreach ($line in $TextFile) {
    # Write-Host $line
    $fname, $lname, [int]$a, [int]$b, [int]$c, [int]$d = $line.split(' ')
    $x = "$fname $lname"
    $avg = (($a + $b + $c + $d) / 4)
    # Write-Host $avg
    if ($x -eq $args[0]) {
        Write-Host $avg
        break
    }
}

我使用Write-Host代替echo并添加了一些(注释)行Write-Host来打印一些“调试数据”。只需取消注释即可查看运行脚本时发生的情况。


推荐阅读