2013-08-06 73 views
2

我想找到一些目錄中的所有* .SH文件,但也有腳本的一些錯誤......查找目錄中的所有* .SH文件

#!/bin/sh 
for plik in /var/panel/starter/* 
do 
    if [ $(basename "$plik") != "priority" ] && [ $(basename "$plik") != "PRIORITY" ] 
    then 
    for plik in $plik/* 
    do 
     filename=$(basename "$plik") 
     extension="${filename##*.}" 
     filename="${filename%.*}" 
     if [ "$extension" == "sh" ] 
     then 
     echo $plik 
     fi 
    done 
    fi 
done 

有在/ var一些文件夾/面板/啓動器,並在這些文件夾中有外殼腳本,這就是爲什麼我用循環兩次。

這是錯誤:

[: 19: *: unexpected operator 
[: 19: sh: unexpected operator 
[: 19: sh: unexpected operator 
[: 19: sh: unexpected operator 
[: 19: *: unexpected operator 

我想這個問題是一個像空文件夾:

/var/panel/starter/cs16/* 

,我沒有一個知道如何面對這一切。

+1

可你只是'找到-name 「* .SH」'?如果你想做一些過濾器,你可以使用'-regex'或者將輸出管道輸給'grep'。或者我誤解了你的要求 – Kent

+1

'/ var/panel/starter/*。sh'? – devnull

+0

這只是一個例子。後來我想執行這些腳本。而不是echo $ plik它將是sh $ plik。如果沒有if [「$ extension」==「sh」]'條件,它也會執行'/ var/panel/starter/cs16/*',我試圖避免這種情況。 @devnull,它不起作用。 –

回答

1

sh: unexpected operator應該給你一個線索。

您正在執行使用sh您的腳本不支持==運營上線19使用bash應該可以正常工作,或只是使用=執行你的腳本。

+0

謝謝。這是我的第一個shell腳本,所以我不知道。 –

0

爲什麼不使用find和grep?

find /var/panel/starter/ -name "*.sh" | grep -iv "/var/panel/starter/priority" 
6

爲什麼要使用一個腳本,當你可以使用達到相同的:

find path_to_folder -iname "*.sh" 
相關問題