如何构造bash代码以使跟踪条件更容易?

如何构造bash代码以使跟踪条件更容易?,bash,ubuntu,if-statement,wizard,Bash,Ubuntu,If Statement,Wizard,我正在制作一个安装向导,但是我有很多IF语句,它总是让我困惑,我会迷失方向,尤其是当我试图修复脚本中的错误时。如何预防?这是我的剧本: 正如你所看到的,我有很多if语句。我不能把他们都记录下来。有没有一种方法可以像HTML一样标记或最小化它们? 我正在使用Atom文本编辑器 或者有没有办法减少IF语句 #!/bin/bash # Author: GlitchyShadowZ # Name: NJDTL Install Wizard 1.0 # Date of Last Update: #

我正在制作一个安装向导,但是我有很多IF语句,它总是让我困惑,我会迷失方向,尤其是当我试图修复脚本中的错误时。如何预防?这是我的剧本:

正如你所看到的,我有很多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
,也是如此):

当匹配3个或更多值时,案例块通常更可读,在某些情况下,匹配2个或更多值时:

case "$startYN" in
  'y')
    ...
    ;;
  'n')
    ...
    case "$CancelConfirm" in
      'y')
        ...
        ;;
      'n')
        ...
        ;;
    esac
    ;;
esac

条件句的常见用法是将下一个关键字放在同一行:

if [ $startYN == y ]; then
  ...
$startYN==n
应该在一个elif语句中(对于
$CancelConfirm==n
,也是如此):

当匹配3个或更多值时,案例块通常更可读,在某些情况下,匹配2个或更多值时:

case "$startYN" in
  'y')
    ...
    ;;
  'n')
    ...
    case "$CancelConfirm" in
      'y')
        ...
        ;;
      'n')
        ...
        ;;
    esac
    ;;
esac

您可能应该修复缩进。尝试将
fi
if
放在同一页边距上,这将帮助您更好地跟踪
ifs
。但是也有
elif
,如果
语句不使用
==
[
;使用
=
或切换到
[使用SyelCuff.NET检查你的代码。BTW,建立一个安装程序,在运行后有条件地显示一组提示,这使得安装程序难以自动化。考虑接受环境变量或命令行参数,所以某人可以运行<代码> CREATIN=1批=1。er
/yourInstaller--createBin--batch
在脚本中(或来自Ansible、Chef、Puppet等自动化工具)不要让它提示。你可能应该修正你的缩进。试着把
fi
if
放在同一页边距上,它会帮助你更好地跟踪你的
ifs
。但是还有
elif
,如果你不使用
=
,你可以用它来减少你的
语句的数量<代码>[
;使用
=
,或切换到
[使用SyelCuff.NET检查你的代码。BTW,建立一个安装程序,在运行后有条件地显示一组提示,这使得安装程序难以自动化。考虑接受环境变量或命令行参数,所以某人可以运行<代码> CREATIN=1批=1。er
/yourInstaller--createBin--batch
在脚本中(或从Ansible、Chef、Puppet等自动化工具中),并且根本没有提示。
=
=
在这里使用不一致。前者保证在所有符合POSIX的
测试
实现中可用[
,而后者不是。(…因此,通过编辑仅使用
=
,您已经使用了便携性较差的选项)。是的。我试图与这个问题保持一致。
=
在这种情况下可能更容易阅读。
=
=
在这里使用不一致。前者保证在所有符合POSIX的
测试
[
实现中都可用,而后者则不可用。(…因此,通过编辑仅使用
==
,您选择了不太方便携带的选项)。是的。我试图与这个问题保持一致。
=
在这种情况下可能更具可读性。