Как мне заставить этот скрипт терминала работать должным образом?

-1

Я хочу, чтобы он выглядел так, как будто я связывался с кучей IP-адресов, и он прекрасно работает до третьей строки в коде, и я хочу иметь возможность это исправить. Также 4 нижние строки не работают.

Так что это в основном то, что я получил до сих пор:

for((i=0;i<=100000000;i++)); 
    do echo "Request #" $i " returned ip-adress " [$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256))];
  if["$i" = "100000000"]
    do echo "All ip-adresses have been stored in local hard drive." -$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256));
  if["$i" = "100000000"]
    do echo [Process Completed];
done
Ричард
источник
2
Что ты вообще пытаешься сделать? Это ничего не хранит на жестком диске, как есть. Простое изречение исправить этот сценарий для меня не сработает, если никто не сможет догадаться, чего вы пытаетесь достичь.
Тайсон

Ответы:

1

Два вопроса:

  1. Вам нужно пробел между «if [» и «[ числовая оценка ]» для правильного выполнения.

  2. Логический синтаксис неверен. if х ; then(и только потом) у ; else z ; fi; done, Elseне является обязательным, но вы не можете объявить два одинаковых ifутверждения следующим образом:

    • if х , then у .
    • if х , then з .

Это не имеет никакого логического смысла. С другой стороны:

  • if х , then у & г делает.

Тем не менее, вот что вы ищете:

#! /bin/bash

for((i=0;i<=100000000;i++)); 
    do echo "Request #" $i " returned ip-adress “[ $((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)) ];
if [ "$i" = "100000000" ];
    then echo "All ip-adresses have been stored in local hard drive." -$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)) && echo [Process Completed];
fi
done

Который при сохранении в виде скрипта test.shвозвращает следующее:

MacBook-Pro:~ njboot$ test.sh
Request # 0  returned ip-adress  [ 0.84.37.68 ]
Request # 1  returned ip-adress  [ 169.181.247.217 ]
Request # 2  returned ip-adress  [ 164.183.119.15 ]
Request # 3  returned ip-adress  [ 191.149.177.224 ]
Request # 4  returned ip-adress  [ 84.28.26.92 ]
Request # 5  returned ip-adress  [ 54.38.89.138 ]
Request # 6  returned ip-adress  [ 86.222.217.2 ]
Request # 7  returned ip-adress  [ 57.178.16.75 ]
Request # 8  returned ip-adress  [ 26.22.140.245 ]
Request # 9  returned ip-adress  [ 222.255.194.118 ]
Request # 10  returned ip-adress  [ 188.26.150.197 ]

Request # 100000000 returned ip-adress  [ 233.66.114.134 ]
All ip-adresses have been stored in local hard drive. -181.167.202.102
[Process Completed]
njboot
источник
0

Не знаю, чего вы здесь пытаетесь достичь, но делать тест на условие выхода, оставаясь внутри цикла, не обязательно:

for ((i=0;i<=100000000;i++)); do
    echo "Request #$i returned ip-adress" [$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256)).$((RANDOM%256))]
done

echo "All ip-adresses have been stored in local hard drive."
echo "[Process Completed]"

Синтаксис if ... then ... else(если вам это нужно для чего-то другого) на самом деле

if [ $i -eq 100000000 ]; then
    echo "Got a match!"
fi
Nohillside
источник