#bash #powershell
#bash #powershell
Вопрос:
Итак, у меня есть этот сценарий оболочки, и я пытаюсь преобразовать его в сценарий 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
PowerShell:
$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
Комментарии:
1. Поскольку у вас уже есть версия Powershell: что именно не работает? Подсказка : попробуйте
$x -eq $args[0]
вместо$x = $args[0]
2. Я новичок в PowerShell, и когда я запускал этот код, он всегда печатал 3 (читал только первую строку) @OcasoProtal
3. Это потому, что вы используете неправильное сравнение в своем if. Используйте
-eq
(сравнение) вместо=
(Назначение!) сделает свое дело.4. Я пробовал, но теперь он просто выводит аргумент @OcasoProtal
5. Просто протестировал его с исправлением, у меня все работает нормально. Как вы вызываете сценарий? Используйте кавычки вокруг аргумента :
yourscript.ps1 "John Big"
!
Ответ №1:
Вы использовали присваивание в своем if-условии вместо сравнения. Поэтому, когда вы заменяете это =
на -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
для печати некоторых «отладочных данных». Просто раскомментируйте, чтобы увидеть, что происходит внутри вашего скрипта при его запуске.