• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Skrypt w Bashu do sprawdzania adresu IP

0 głosów
161 wizyt
pytanie zadane 7 lutego w Inne języki przez whiteman808 Mądrala (5,560 p.)

Napisałem małe użyteczne pomocnicze narzędzie do sprawdzania adresu IP. Proszę o ocenę kodu. Dziękuję i pozdrawiam

#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

readonly SCRIPT_NAME="${0##*/}"

check_deps() {
    command -v "curl" >/dev/null 2>&1 || die "curl: command not found"
}

usage() {
    cat <<EOF
Usage: ${SCRIPT_NAME} [-4|-6] [-h|--help]

Options:
  -4            show ipv4 address
  -6            show ipv6 address
  -h, --help    show help and exit
EOF
}

shell_quote() {
    local -r string="$1"
    printf "'%s'" "${string//'/'\\''}"
}

die() {
    local -r message="$1"
    printf "%s: %s\n" "${SCRIPT_NAME}" "${message}" >&2
    exit 1
}

invalid_option() {
    local -r option="$1"
    printf "%s: invalid option %s\n" "${SCRIPT_NAME}" "$(shell_quote "${option}")" >&2
    printf "Try '%s --help' for more information.\n" "${SCRIPT_NAME}" >&2
    exit 1
}

parse_args() {
    ipv4=""
    ipv6=""
    while (( $# > 0 )); do
        case "$1" in
            -h|--help) usage; exit 0 ;;
            -4) ipv4="true"; shift ;;
            -6) ipv6="true"; shift ;;
            *) invalid_option "$1" ;;
        esac
    done
}

validate_args() {
    if [[ ${ipv4} && ${ipv6} ]]; then
        die "options '-4' and '-6' cannot be used together"
    fi
}

show_ip() {
    local -a curl_args=( "-4" )
    [[ ${ipv6} ]] && curl_args=( "-6" )
    curl "${curl_args[@]}" "zx2c4.com/ip"
}

main() {
    check_deps
    parse_args "$@"
    validate_args
    show_ip
}

main "$@"

1 odpowiedź

0 głosów
odpowiedź 28 kwietnia przez niezalogowany

Witamy Pana
1. W shell_quote ma Pan literówkę, powinno być

printf "'%s'" "${string//\'/\'\\\'\'}"

2. ipv4 i ipv6 lepiej poprawić na poniższy, bo może u Pana powstać błąd nounset

if [[ -n ${ipv4} && -n ${ipv6} ]]; then

3. Całość ogólnie nieźle.

Pozdrawiamy

Podobne pytania

0 głosów
1 odpowiedź 182 wizyt
pytanie zadane 18 lutego w Inne języki przez whiteman808 Mądrala (5,560 p.)
+1 głos
1 odpowiedź 724 wizyt
pytanie zadane 13 czerwca 2021 w Inne języki przez mattaha Użytkownik (690 p.)
0 głosów
0 odpowiedzi 429 wizyt
pytanie zadane 21 czerwca 2021 w Nasze projekty przez mattaha Użytkownik (690 p.)

93,729 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,288 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...