Попытка заставить оператор printf выполниться один раз в цикле bash for

Попытка заставить оператор printf выполниться один раз в цикле bash for

Мне интересно, как бы я поступил, если бы

printf "Credentials found!"

только один раз при обнаружении нескольких учетных данных.

Скриншот

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'

Петля bash:

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

решение1

Вы можете провести тест, $iкак в:

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

Предполагая, что вы не используетеассоциативный массив bash.

Суммируя:Если индекс меньше 1, то печатать.


Ради удобства чтения я бы также разбил эти строки. Слишком широко. Обратите внимание, что вы также можете сказать:

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

Использование заглавных букв для переменных также является плохой привычкой.

Информация также обычно должна быть напечатана наstderr, так >&2.

Также использовал бы:

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

вместо:

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

решение2

Вывести заголовок, если userв массиве есть элементы.

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

Затем выполните петлю.

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

Связанный контент