簡體   English   中英

為什么這個bash腳本給我一個關於“缺少`]'”的錯誤?

[英]Why is this bash script giving me an error about “missing `]'”?

我必須檢查文件dir1dir2是否存在。 然后,遞歸刪除它們,否則打印一些消息。 這是我的代碼:

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.

怎么了

該行的書寫方式不正確:

if [ -d "dir1"] && [-d "dir2"]; then
             ^      ^       ^
              missing spaces

應該

if [ -d "dir1" ] && [ -d "dir2" ]; then

然后你有這個:

rn -r dir1
 ^
 rn does not exist

這應該是rmdir2因為您已經刪除了dir1

rm -r dir2

您需要具備:

[ -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變量中是否存在任何dirs ,在這種情況下,嘗試刪除它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM