Мне интересно, как бы я поступил, если бы
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