我刚开始使用bash脚本,这可能很简单,但我不确定如何做到这一点.我有一个try 在特定路径挂载磁盘的命令.DISK1被定义为特定USB端口上的特定SSD驱动器--在这里并不太重要.

/bin/mount DISK1 ${MOUNT_PATH}

现在我想判断一下安装是否成功.通常,如果成功,该表达式将返回0,但偶尔会出现读取错误,并且该表达式返回32.

if [$? -eq 0]; then
   echo "Mounted DISK 1 at ${MOUNT_PATH}"
elif [$? -eq 32]; then
   echo "DISK 1 read error"
else
   echo "FAILED TO MOUNT"
fi

当这个脚本运行时,表达式返回为32,它转到elif块,但随后我得到了一个"没有找到命令".我这么想是因为"$?"已经被判断过了,所以你不能叫"$?"再次?

那么,如何让它再次运行mount表达式求值并执行32-eq 32比较,以便它可以运行"Disk1 Read Error"?

存储判断结果是解决这一问题的方法吗?这个代码会起作用吗?我很难测试代码,因为磁盘读取错误需要几天时间才能显示出来.

/bin/mount DISK1 ${MOUNT_PATH}
$mnt_stat = $?
if [$mnt_stat -eq 0]; then
  echo "Mounted DISK 1 at ${MOUNT_PATH}"
elif [$mnt_stat -eq 32]; then
  echo "DISK 1 read error"
else
  echo "FAILED TO MOUNT"
fi

推荐答案

如果您在https://shellcheck.net中运行您的脚本,您将看到[$mnt_stat -eq 0]是错误的.你需要[ ]左右的空格,因为这是一个命令.

此外,=个变量赋值周围不允许有空格.


一种恰当的方式,使用现代的猛烈抨击:

mount DISK1 "$MOUNT_PATH"
mnt_stat=$?
if ((mnt_stat==0)); then
    echo "Mounted DISK 1 at $MOUNT_PATH"
elif ((mnt_stat == 32)); then
    echo "DISK 1 read error" >&2
else
    echo "FAILED TO MOUNT" >&2
fi

((...))$((...))是算术命令,如果表达式为非零,则返回退出状态0,如果表达式为零,则返回1.也用作"let"的同义词,如果需要副作用(任务).

http://mywiki.wooledge.org/ArithmeticExpression


[testPOSIX测试命令.它可以对文件和字符串进行简单的测试.在bash中,你应该使用功能更强大的[[,为了一致性,你应该禁止[.[[可以进行模式匹配,使用起来更快、更安全.在本例中,我们使用((表示可读性更好的算术.

See
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
http://mywiki.wooledge.org/BashFAQ/031


不要被空格搞糊涂了.它们是表格中的必填项

[ ]
[[ ]]

因为大约有commands个.

使用

(( ))

这只是一个判断,所以它们不是空间规则.

Linux相关问答推荐

OpenCV编译错误&未定义的引用&Quot;

并行函数的最后一个实例的状态

Docker 守护进程安装在 ubuntu jenkins docker 容器代理权限被拒绝

运行系统命令失败,但相同的命令可以直接在 bash 中执行

操作系统信号处理循环 - 阻塞或非阻塞读取?

使用 AWK 过滤 Linux 输出

Ubuntu 20 不支持 MAP_FIXED_NOREPLACE

我需要制作一个 awk 脚本来解析文件中的文本.我不确定我是否做得正确

sed: -i 不能与 Mac OS X 上的标准输入一起使用

使用 awk 或 sed 删除特定字符

如何计算制表符分隔的文本文件中字段的唯一值的数量?

错误:命令gcc在 CentOS 上失败,退出状态为 1

Ubuntu 上 Java 应用程序中的丑陋字体

如何将文件从 Vagrant 机器复制到 localhost

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

如何仅打印 hexdump 中的十六进制值,而不打印行号或 ASCII 表?

如何使用 C++ 在 Linux 中获取总 CPU 使用率

在没有 python 命令的情况下在终端中运行 python 脚本

仅当文件存在于 shell 脚本中时才移动

readelf vs. objdump:为什么都需要