Bash 中的控制流变量

Bash 中的控制流变量

Debian-Apache 的 Web 应用程序文档根通常是 ,/var/www/html/但对于 Arch-Apache 通常是/srv/http/.

我编写了一个与发行版无关的 LAMP 建立脚本,我需要它来测试面向发行版的文档根目录是什么(基于该目录的存在),而true我将继续使用它直到最后脚本的。

我通常这样做drt="/var/www/html",但我需要让变量控制像这个伪代码一样流动:

drt="/var/www/html XOR /srv/http"

当然,两个或多个选项中只有一个是正确的,并且这应该以异或条件为基础。

在 Bash 中有没有办法做到这一点?

答案1

我需要它来测试面向发行版的文档根目录是什么(基于目录的存在)

从这两个选项中,您可以用来查看它们是否存在:[ -d dir ]

if [ -d /var/www/html ]; then
    drt=/var/www/html;
elif [ -d /srv/http ]; then
    drt=/srv/http
else
    echo "No HTTP server root directory found"
    exit 1
fi

或者,使用循环:

drt=
for d in /var/www/html /srv/http; do
    if [ -d "$d" ]; then
        drt=$d;
        break 
    fi
done
if [ -z "$drt" ]; then
    echo "No HTTP server root directory found"
    exit 1
fi 

当然,所有这些都假设他们实际上使用发行版的默认文档根目录,但情况可能并非如此。让用户有机会验证脚本找到的目录是否正确可能不是一个坏主意。

相关内容