外壳脚本嵌套的 If/Else 语句



我在 bash 命令中的嵌套 if/else 语句出现问题。第一组代码运行良好,但是在此之前添加read -p部分时,某些内容被抛弃了。

有效的代码:

#!/bin/bash
(
echo p
echo q
) | sudo fdisk $1
if [ ! -d "$2" ]; then
if [ -f "$2" ]; then
echo "$2 exists and is not a directory"
exit 1
else
mkdir "$2"
fi
fi
function mountDisk ()
{
sudo mount -o loop,offset=$((2048*512)) $1 $2
}
mountDisk $1 $2

所以这工作正常,显示 fdisk 信息并继续创建文件夹并装载驱动器。

在获得信息后添加选项以继续安装时,我遇到了问题。

代码的更改部分是(-f 被删除,因为它被认为是不必要的):

read -p "Mount $1 ?" $3
if [ "$3" = "Yes" ]; then
if [ ! -d "$2" ]; then
echo "$2 exists and is not a directory"
exit 1
else
mkdir "$2"
fi
else
exit 1
fi

我在第一个 if 行上尝试了几个不同的版本([ $3 == "是" ] 是第一个)。但许多人给出了错误,主要是关于预期的一元运算符。

问题是它现在没有给出错误,它似乎只是跳到第二个其他并退出程序,而不是创建文件夹或挂载驱动器。

我花了很多时间在网上研究这个问题,但一直无法纠正这个问题,所以任何建议将不胜感激。

您在read中扫描值的语法不正确,我建议完全使用不同的变量名称,以便您可以区分什么是脚本参数,什么不是脚本参数。

尝试:

read -p "Mount $1 ? " userprompt
if [ "$userprompt" = "Yes" ]; then
if [ ! -d "$2" ]; then
echo "$2 exists and is not a directory"
exit 1
else
mkdir "$2"
fi
else
exit 1
fi

最新更新