Versuch, eine printf-Anweisung einmal in einer Bash-For-Schleife auszuführen

Versuch, eine printf-Anweisung einmal in einer Bash-For-Schleife auszuführen

Ich frage mich, wie ich vorgehen soll, um die

printf "Credentials found!"

nur einmal, wenn mehrere Anmeldeinformationen gefunden werden.

Bildschirmfoto

Attempting Dictionary Attack on 192.168.91.130

Credentials Found!

Log into the telnet server by running telnet -l admin 192.168.91.130

When prompted enter the password found 'admin'

Credentials Found!

Log into the telnet server by running telnet -l sfx 192.168.91.130

When prompted enter the password found 'toor'

Die bashSchleife:

for i in "${!user[@]}"; do
    printf "The Username & Password is %s : %s\n\n" "${user[i]}" "${pass[i]}" >> SSH-Credentials.txt

    printf "${NCB}Credentials Found!${NC}\n\n"

    printf "Log into the SSH server by running ${YELLOW}ssh ${user[i]}@$ip${NC}\n\nWhen prompted enter the password found ${YELLOW}'${pass[i]}'\n"
    printf "${NC}\n"
done

Antwort1

$iSie könnten einen Test wie folgt durchführen :

    [[ "$i" -lt 1 ]] && printf "I am only printed once\n"

    # OR
    (( i < 1 )) && printf "I am only printed once\n"

    # OR
    ! (( i )) && printf "I am only printed once\n"

    # OR
    [ "$i" -lt 1 ] && printf "I am only printed once\n"

    # OR
    if [[ "$i" -lt 1 ]]; then
        printf "I am only printed once\n"
    fi

Vorausgesetzt, Sie verwenden nichtassoziatives Bash-Array.

Zusamenfassend:Wenn der Index kleiner als 1 ist, dann drucken.


Der Lesbarkeit halber hätte ich diese Zeilen auch aufgeteilt. Viel zu breit. Beachten Sie, dass Sie auch sagen können:

printf '%s %s some long text' \
"$var1" "$var2"

Auch die Verwendung von Großbuchstaben für Variablen ist eine schlechte Angewohnheit.

Informationen sollten normalerweise auch gedruckt werden aufstderr, Also >&2.

Hätte auch verwendet:

prinf '%s@%s' "${user[i]}" "$ip" >&2

anstatt:

prinf "${user[i]}@$ip" >&2

Antwort2

Gibt den Header aus, wenn das userArray Elemente enthält.

if [[ ${#user[@]} -gt 0 ]]; then
    printf '%sCredentials Found!%s\n\n' "$NCB" "$NC"
fi

Machen Sie dann Ihre Schleife.

for i in "${!user[@]}"; do
    printf 'The Username & Password is %s : %s\n\n' "${user[i]}" "${pass[i]}" >> SSH-Credentials.txt

    cat <<END_MESSAGE
Log into the SSH server using ${YELLOW}ssh ${user[i]}@$ip$NC
When prompted, enter the password found: ${YELLOW}${pass[i]}$NC

END_MESSAGE
done

verwandte Informationen