# 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
왜 이것이 작동하지 않습니까?
배포판을 분리 했지만 ||
여전히 작동하지 않습니다.
답변1
기타 참고사항:
function installing-system-requirements()
함수 정의를 위한 표준 구문이 아닙니다. Bourne/POSIX 구문 은 Korn 구문 installing-system-requirements() compound-command
입니다 . function installing-system-requirements { ...; }
이와 같은 두 가지를 결합하는 것은 (주로 우연히) 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
답변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