这个bash脚本中的以下行是做什么的?

时间:2012-11-02 00:01:17

标签: linux bash

此行位于linux上的/etc/rc.sysinit文件中:

[ -r /proc/mdstat -a -r /dev/md/md-device-map ] && /sbin/mdadm -IRs

我对它实际完成的内容并不感兴趣,而不是语法如何工作。

3 个答案:

答案 0 :(得分:2)

它测试文件/proc/mdstat/dev/md/md-device-map是否存在且可读(-r),如果是,则执行/sbin/mdadm -IRs

方括号是程序test(或其Bash替换)的替代名称,可以测试许多内容,例如文件的存在。 -a是合乎逻辑的“和”。

有关详细信息,请参阅man bash中的“条件表达式”。

答案 1 :(得分:1)

[实际上是一个命令名称,它等同于test命令。因此,使用man test找出-r的含义。

根据您的系统,您可能会在[中找到/usr/bin

$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 37000 Oct  5  2011 /usr/bin/[

或者它可以是符号链接:

$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 4 Oct  5  2011 /usr/bin/[ -> test

有些shell也有[作为内置命令(有些shell甚至有[[提供了额外的选项)。与大多数内置命令一样,您也可以在文件系统中找到一个实现。

答案 2 :(得分:1)

这意味着:

如果您可以阅读/proc/mdstat并且您可以阅读/dev/md/md-device-map,那么请运行/sbin/mdadm -IRs

请参阅help test

注意

[[是一个类似于[命令(但功能更强大)的bash关键字。请参阅http://mywiki.wooledge.org/BashFAQ/031http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

除非您是为POSIX sh撰写的,否则我们建议使用[[