Почему не будет || работать в сценарии оболочки?

inet = семейство протоколов Интернета

inet6 = семейство интернет-протокола версии 6

справочная страница

DESCRIPTION

The Internet protocol family is a collection of protocols layered atop the Internet Protocol (IP) transport layer, and utilizing the Internet address format. The Internet family provides protocol support for the SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW socket types; the SOCK_RAW interface provides access to the IP protocol.

man-страница inet6

DESCRIPTION

The inet6 family is an updated version of inet(4) family. While inet(4) implements Internet Protocol version 4, inet6 implements Internet Protocol version 6.

inet6 is a collection of protocols layered atop the Internet Protocol version 6 (IPv6) transport layer, and utilizing the IPv6 address format. The inet6 family provides protocol support for the SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW socket types; the SOCK_RAW interface provides access to the IPv6 protocol.

-3
31.10.2020, 04:36
2 ответа
# Detect Operating System
function dist-check() {
  # shellcheck disable=SC1090
  if [ -e /etc/os-release ]; then
    # shellcheck disable=SC1091
    source /etc/os-release
    DISTRO=$ID
    # shellcheck disable=SC2034
    DISTRO_VERSION=$VERSION_ID
  fi
}

# Check Operating System
dist-check

# Pre-Checks
function installing-system-requirements() {
  # shellcheck disable=SC2233,SC2050
  if ([ "$DISTRO" == "ubuntu" ] || [ "$DISTRO" == "debian" ] || [ "$DISTRO" == "raspbian" ]); then
    apt-get update && apt-get install iptables curl coreutils bc jq sed e2fsprogs -y
  fi
  # shellcheck disable=SC2233,SC2050
  if ([ "$DISTRO" == "fedora" ] || [ "$DISTRO" == "centos" ] || [ "$DISTRO" == "rhel" ]); then
    yum update -y && yum install epel-release iptables curl coreutils bc jq sed e2fsprogs -y
  fi
  if [ "$DISTRO" == "arch" ]; then
    pacman -Syu --noconfirm iptables curl bc jq sed
  fi
}

# Run the function and check for requirements
installing-system-requirements

Отсутствовал $изDISTRO

0
18.03.2021, 22:53

Некоторые другие примечания:

function installing-system-requirements()не является стандартным синтаксисом для определения функций. Синтаксис Bourne/POSIX — installing-system-requirements() compound-command, function installing-system-requirements {...; }— это синтаксис Korn. Объединение обоих как это просто работает (в основном случайно )в pdksh, zsh и bash (, хотя некоторые оболочки, такие как busybox sh и yash, добавили поддержку для совместимости с bash ).

(...)состоит в том, чтобы представить среду подоболочки, которая в большинстве оболочек реализуется путем разветвления дочернего процесса оболочки. Вы бы использовали это только для того, чтобы изолировать часть кода, чтобы изменения в нем не были постоянными. Нет особого смысла использовать их, как здесь.

Сравнение на равенство для утилиты [— это =, а не ==(, хотя некоторые реализации [понимают ==так же, как и расширение ).

Здесь у вас есть ряд независимых ifутверждений. Это означает, что если $DISTROуже соответствует, например, debian, вы все равно попытаетесь сравнить его с fedora. Чтобы избежать этого, вы можете использовать elifдля проверки последовательности:

if [ "$DISTRO" = debian ] || [ "$DISTRO" = ubuntu ]; then
 ...
elif [ "$DISTRO" = fedora ] || [ "$DISTRO" = centos ]; then
 ...
fi

Но чтобы сопоставить строку с несколькими значениями или шаблонами, использование конструкции caseсделало бы это намного проще:

case "$DISTRO" in
  (ubuntu | debian)...;;
  (ferdora | centos)...;;
esac
3
18.03.2021, 22:53

Теги

Похожие вопросы