2016-04-22 2 views
0

コマンドラインからディレクトリを引数として取り、すべてのサブディレクトリを出力するbashスクリプトを1つ作成します。私のスクリプトは、このディレクトリにあるすべてのファイルを出力し、ifループには入りません。私は間違って何をしているのですか?bashスクリプトでif loopを入力できません

#!/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 

答えて

2

[ -d $k ]テスト$ kのかどうか、現在の作業ディレクトリへの相対ディレクトリですが、あなたの代わりに

[ -d "$1/$k" ] 

を使用する必要があります。

また、代わりlsの出力を反復で、上記変更不要になり

for k in $1/* 

を使用します。

BTW、whileuntil、およびforはループを開始しますが、ifはループしません。私はそれを「ブロック」と呼んでいます。

関連する問題