如何构造bash代码以便更容易跟踪条件?
我正在制作一个安装向导,但是我有很多IF语句,它让我感到困惑,并且迷惑不解,特别是当我尝试修复某些脚本错误时。如何防止这一点?这是我的脚本:如何构造bash代码以便更容易跟踪条件?
正如你可以看到我有很多,如果IF语句。我无法跟踪他们。有没有像使用HTML一样标记或最小化它们的方法? 我正在使用Atom文本编辑器。
还是有减少IF语句的方法吗?
#!/bin/bash
# Author: GlitchyShadowZ
# Name: NJDTL Install Wizard 1.0
# Date of Last Update:
# Date of LEGACY (Initial Release):
clear
echo "Would you like to start the NJDTL Install Wizard? [y/n]"
read startYN
if [ $startYN == y ]
then
echo "Starting Install Wizard. . ."
mkdir ~/.NJDTL
fi
if [ $startYN == n ]
then
echo "Are you sure you want to cancel the Install Wizard? [y/n]"
read CancelConfirm
if [ $CancelConfirm == y ]
then
echo "Cancelling Install. . ."
exit
fi
if [ $CancelConfirm == n ]
then
echo "Chose "n". Continuing Installation. . ."
exec $0
fi
fi
[Loading Screen removed for the purpose of this post]
if ! [ -d ~/sbin ]
then
echo "A Bin folder in /home/ is required for this program. Create one? [y/n]"
read BinChoice
if [ $BinChoice = y ]
then
mkdir ~/testbin
fi
if [ $BinChoice = n ]
then
echo "Without a Bin Folder NJDTL Will not work. Cancelling Install."
fi
else
echo "bin folder existent. Continuing Install. . ."
fi
fi
条件句的常见用法是把下一个关键字在同一行:
if [ $startYN == y ]; then
...
$startYN == n
应该是一个elif的语句(与同为$CancelConfirm == n
):
if [ "$startYN" == y ]; then
...
elif [ "$startYN" == n ]; then
..
fi
当匹配3个或更多值并且在某些情况下有2个或更多值时,一个案例块通常更易读:
case "$startYN" in
'y')
...
;;
'n')
...
case "$CancelConfirm" in
'y')
...
;;
'n')
...
;;
esac
;;
esac
'='和'=='在这里不一致。前者保证在所有符合POSIX标准的'test'或'['的实现中可用,而后者则不可用。 –
(...因此,通过编辑仅使用'==',您已经使用** less **便携式选项)。 –
是的。我试图与问题保持一致。在这种情况下'='可能更具可读性。 – Ajb27
您应该修复您的缩进。尝试将'fi'放在与'if'相同的页边上,它可以帮助您更好地跟踪您的'ifs'。但是也有'elif',你可以用它来减少if语句的数量。 – quantik
不要在''''''''''''要么使用'=',要么切换到'[['。使用shellcheck.net来检查你的代码。 – chepner
顺便说一句,构建一个安装程序,以便在运行后有条件地显示一大堆提示是不幸的 - 它使安装程序很难自动化。考虑接受环境变量或命令行参数,所以有人可以在脚本中运行'createBin = 1 batch = 1。/ yourInstaller'或者'./yourInstaller --createBin --batch'(或者像Ansible这样的自动化工具,厨师,傀儡等),并没有提示。 –