# 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 { ...; }
これらの2つの組み合わせは(主に偶然に)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