Tentando fazer com que uma instrução printf seja executada uma vez em um loop for bash

Tentando fazer com que uma instrução printf seja executada uma vez em um loop for bash

Eu estou me perguntando como eu faria para ter o

printf "Credentials found!"

apenas uma vez quando várias credenciais forem encontradas.

Captura de tela

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'

O bashlaço:

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

Responder1

Você poderia fazer um teste $icomo em:

    [[ "$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

Supondo que você não usematriz bash associativa.

Resumidamente:Se o índice for menor que 1, imprima.


Por uma questão de legibilidade, eu também teria quebrado essas linhas. Muito largo. Observe que você também pode dizer:

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

Usar letras maiúsculas para variáveis ​​também é um mau hábito.

As informações também devem normalmente ser impressas emstderr, então >&2.

Também teria usado:

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

em vez de:

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

Responder2

Produza o cabeçalho se a usermatriz contiver elementos.

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

Então faça o seu loop.

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

informação relacionada