Come faccio a far funzionare correttamente questo script terminale?


-1

Voglio che appaia come se stessi contattando un sacco di indirizzi IP e funziona bene fino alla terza riga del codice e voglio essere in grado di risolverlo. Anche le 4 linee di fondo non funzionano.

Quindi questo è fondamentalmente quello che ho finora:

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
Cosa stai ancora cercando di fare? Questo non memorizza nulla sul disco rigido così com'è. Dire semplicemente che risolvi questo script per me non funzionerà se nessuno può indovinare cosa stai cercando di realizzare.
Tyson,

Risposte:


1

Due problemi:

  1. È necessario uno spazio tra "if [" e "[ valutazione numerica ]" per eseguire correttamente.

  2. La sintassi logica non è corretta. if x ; then(e solo allora) y ; else z ; fi; done. Elsenon è necessario, ma non puoi dichiarare due ifaffermazioni identiche in questo modo:

    • if x , then y .
    • if x , then z .

Questo non ha alcun senso logico. D'altro canto:

  • if x , then y & z fa.

Detto questo, ecco cosa stai cercando:

#! /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

Che, se salvato come script, test.shrestituisce quanto segue:

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]

0

Non so cosa stai cercando di realizzare qui, ma non è davvero necessario eseguire un test per la condizione di uscita pur restando all'interno del loop:

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]"

La sintassi per if ... then ... else(nel caso sia necessario questo per qualcos'altro) in realtà è

if [ $i -eq 100000000 ]; then
    echo "Got a match!"
fi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.