2016-04-22 4 views
0

Ich möchte ein Bash-Skript erstellen, das als Argument ein Verzeichnis von der Befehlszeile übernimmt und alle meine Unterverzeichnisse ausgibt. Mein Skript druckt alle Dateien, die dieses Verzeichnis enthält und die nicht in die if-Schleife eingegeben werden. Was mache ich falsch und wie repariere ich es?Kann nicht geben, Schleife an Bash-Skript

#!/bin/bash 
echo to argv[1] = $1 
if [ -e $1 ] #exist the file 
then if [ -d $1 ] # is directory 
    then if [ -r $1 ] #we can read 
     then for k in $(ls $1) #all the files in the arv[1] 
     do 
      echo $k #print all the files of directory 
      if [ -d $k ] 
       then echo $k 
      fi 
     done 
    fi 
    fi 
fi 

Antwort

2

[ -d $k ] prüft, ob k $ ist ein Verzeichnis relativ zum aktuellen Arbeitsverzeichnis, aber Sie müssen stattdessen

[ -d "$1/$k" ] 

verwenden.

auch statt über die Ausgabe von ls iterieren, verwenden

for k in $1/* 

, die die obige Änderung überflüssig macht.

BTW, while, until und for eine Schleife starten, aber if nicht. Ich würde es einen "wenn Block" nennen.