我不熟悉bash脚本的使用(在过去的几个小时中,我只是作为一个较大项目的一部分来学习它的,我正在尝试理解bash脚本中的这段代码:
for newDir in `cat tempfile.list` ; do
dir=/Tree/Apples/$newDir
[ -d $dir ] || mkdir -p $dir/{log,err}
done
[-d $ dir]做什么?这段代码是否在dirName
目录中创建了一个名为Apples
的新目录?如果是这样,为什么要这样做呢?我没有看到说mkdir dirName
的声明。有人可以大致解释一下[ -d $dir ] || mkdir -p $dir/{log,err}
语句的含义吗?非常感谢您的帮助!
command1 || command2
是一种简短的书写方式
if ! command1
then
command2
fi
||
是具有短路的逻辑测试,类似于大多数编程语言;如果左侧操作数成功,则不会执行右侧操作数。
[ -d $dir ]
测试名为$dir
的目录是否已经存在。因此,如果该测试失败,它将执行mkdir -p $dir/{log,err}
。
mkdir
创建目录,并且在给定-p
选项后,它将创建创建目标目录所需的所有中间目录。
用逗号分隔的列表中的括号用于自动重复命令的一部分,因此$dir/{log,err}
是$dir/log $dir/err
的快捷方式。因此,完整的mkdir命令扩展为
mkdir -p $dir/log $dir/err
因此,此脚本要做的是创建tempfile.list
中列出的所有尚不存在的目录,并在其创建的目录中创建log
和err
子目录。