# 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 语法是installing-system-requirements() compound-command
,function installing-system-requirements { ...; }
是 Korn 语法。像这样将两者结合起来就可以在 pdksh、zsh 和 bash 中工作(大部分是偶然的)(尽管一些 shell,如 busybox sh 和 yash 已经添加了对此的支持,以便与 bash 兼容)。
(...)
就是引入一个子shell环境,在大多数shell中是通过fork一个子shell进程来实现的。您只能使用它来隔离一段代码,以便其中的更改不会持久。像在这里那样使用它们没有多大意义。
该[
实用程序的相等比较是=
, 不是==
(尽管某些[
实现==
以及扩展都可以理解)。
在这里,你有许多独立的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