bash for 루프에서 printf 문을 한 번 실행해 보세요.

bash for 루프에서 printf 문을 한 번 실행해 보세요.

어떻게 해야 할지 알고 싶습니다.

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

관련 정보