2012-12-20 77 views
2

我正在嘗試編寫一個bash腳本,該腳本需要用戶主目錄並循環執行第一級子目錄,並僅在這些目錄不是/ Library或/公用文件夾。我到目前爲止的代碼不起作用,因爲我收到一條錯誤消息,說$ dir返回的目錄名稱是一個目錄。這裏是代碼:檢查目錄是/ Library還是/ Public

#!/bin/bash 

user="short name" 
source_root="/Users/" 

source_use="$source_root$user" 
cd "$source_use" 

dirarr=(*/) 

echo ${dirarr[@]} 

for dir in "${dirarr[@]}" 
do 
    if ("$dir" -ne "/Library" -o "$dir" -ne "/Public") 
     then echo $dir. 
      # do something 
    fi 
done 

任何人都可以幫助我得到這個工作。

非常感謝

回答

1

你的腳本有幾個問題:

  1. 您需要在您的if聲明,不()使用[ ][[ ]]。在你的例子中()創建一個子shell並嘗試運行一個命令"$dir",這就是你收到錯誤信息的原因。

  2. 你正在比較字符串,你不會找到 - 嘗試"Library/""Public/"來代替。

  3. 您可能想要-a而不是-o

  4. -ne用於比較數字。你想要!=

這是你的腳本的修正版本:

#!/bin/bash 

user="short name" 
source_root="/Users/" 

source_use="$source_root$user" 
cd "$source_use" 

dirarr=(*/) 

echo ${dirarr[@]} 

for dir in "${dirarr[@]}" 
do 
    if [ "$dir" != "Library/" -a "$dir" != "Public/" ] 
    then 
     echo $dir. 
     # do something 
    fi 
done 
+0

謝謝。這很好用 – pdoak

1

試試這個:

cd $source_root$user 

for dir in `find . -maxdepth 1 -type d` 
do 
    if [ $dir = ./Library ] || [ $dir = ./Public ] 
    then 
    continue 
    fi 

    (Perform actions) 
done 

此外,慶典是倒退。 !=是字符串不等於,-ne是整數不等於。所以,也要改成等號。

祝你好運!

+0

謝謝你的解決方案。我只是試圖在用戶主文件夾中查找非隱藏目錄,而此解決方案查找所有目錄。由於我仍然在學習bash,因此看到這個替代解決方案很有用。謝謝。 – pdoak

+0

@pdoak - 如果你正在尋找非隱藏目錄,你應該使用['GetFileInfo(1)'](https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ ManPages/man1/GetFileInfo.1.html)而不是硬編碼目錄名稱。 –