我想检查作为参数传递给脚本的父目录列表中存在的目录 1 8 和 4。 PFB 我的脚本
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd $line
echo "checking in $line" >> ../filesearch.log
if [ [ -d 1] && [ -d 8] && [ -d 4] ]; then
echo "1 8 4 exists" >> ../filesearch.log
else
echo "Dir 1 8 4 does not exist" >> ../filesearch.log
fi
cd ../
done < "$1"
当我使用 if [ [ -d 1] && [ -d 8] && [ -d 4] ]; 时出现以下错误
./fs.sh: line 8: [: -d: binary operator expected
如果我们使用 [[ -d 1 ]];而不是 if [ [ -d 1] && [ -d 8] && [ -d 4] ];我的代码工作正常,但我的要求是检查父目录中是否存在上述所有文件(1 4 8)。
答案1
这里的根本问题是您假设这[
只是同一类型的括号,并且您可以嵌套它们。那不是真的。表达方式[ ... ]
与 相同test ...
。
该test
实用程序可以将多个测试与-a
forand
和-o
for结合起来or
。详细信息请参阅手册。
所以您可以将支票写为test -d 1 -a d 4 -a -d 8
或[ -d 1 -a d 4 -a -d 8 ]
答案2
像这样做if [ -d 1 ] && [ -d 8 ] && [ -d 4 ]
编辑:忽略,下面的答案是正确的。
答案3
尝试这个,
if [[ -d 1 && -d 8 && -d 4 ]];