我必须检查文件dir1
和dir2
是否存在。然后,递归删除它们,否则打印一些消息。这是我的代码:
if [ -d "dir1"] && [-d "dir2"]; then
echo "directory exists"
echo "deleting existing files...."
sleep 2
rm -r dir1
rn -r dir1
echo "exisitng files deleted!!"
else
echo "directory does not exist"
fi
这给了我一个错误的表达错误。
./check.sh: line 16: [: missing `]'
directory does not exist.
这里有什么问题?
答案 0 :(得分:7)
此行未正确写入:
if [ -d "dir1"] && [-d "dir2"]; then
^ ^ ^
missing spaces
应该是
if [ -d "dir1" ] && [ -d "dir2" ]; then
然后你有这个:
rn -r dir1
^
rn does not exist
应该是rm
和dir2
,因为您已经删除了dir1
:
rm -r dir2
答案 1 :(得分:3)
你需要:
[ -d "dir" ]
和不:
[-d "dir"]
注意空格。请参阅fedorqui关于其他问题的答案。
建议更强大的解决方案(根据您的喜好添加更详细的输出):
#!/bin/sh
dirs="dir1 dir2" # Directory names may not contain spaces
for dir in $dirs; do
[ ! -d $dir ] || rm -r $dir || echo "failed to remove $dir"
done
请注意,使用&&
的解决方案需要存在两个目录才能触发删除。我不知道这是不是你的意图。我的解决方案查看dirs
变量中的任何目录是否存在,并且在这种情况下尝试删除它们。