어떻게 하면 좋을지 궁금합니다.
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 배열.
간단히 말해서:index가 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