[英]Why is this bash script giving me an error about “missing `]'”?
我必須檢查文件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.
怎么了
該行的書寫方式不正確:
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
您需要具備:
[ -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.