ファイルの行を読み込み、解析して変数の値を割り当て、変数があらかじめ定義された文字列と一致した場合に動作します。私は「#!/ binに/ bashのを使用してそれを実行しています。ここでは、コードです。bashのループが評価されていない場合
23 for DIR in $(find . -name "H[A-Z]*" -maxdepth 1); do
24 if $(test -d ${DIR}); then
25 echo $(basename ${DIR});
26 cd $(basename ${DIR});
27
28 for fname in $(find . -name "*.DAT"); do
29 echo $(basename $fname);
30 calType=$(grep 'Level_Unit' $fname | sed -e 's/.*=\([A-Z]\)/\1/');
31 echo $(basename $calType);
32 if [ "$calType" == FPL ]
33 then
34 echo "This is a keeper " $calType;
35 fi
36 done
37 cd ../
38
39 fi;
40
41 done
私はここに私の端末に出力をダンプしています私が見たものです...
sumit$ ./harp_phaseI_calfilenames.sh
+ rm harp_Phase1_calnames1.txt
+ touch harp_Phase1_calnames1.txt
+ calTest=FPL
++ find . -name 'H[A-Z]*' -maxdepth 1
+ for DIR in '$(find . -name "H[A-Z]*" -maxdepth 1)'
++ test -d ./HALAF032
++ basename ./HALAF032
+ echo HALAF032
HALAF032
++ basename ./HALAF032
+ cd HALAF032
++ find . -name '*.DAT'
+ for fname in '$(find . -name "*.DAT")'
++ basename ./08E21D00.DAT
+ echo 08E21D00.DAT
08E21D00.DAT
++ grep Level_Unit ./08E21D00.DAT
++ sed -e 's/.*=\([A-Z]\)/\1/'
+ calType=$'V\r'
++ basename $'V\r'
+ echo $'V\r'
V
+ '[' $'V\r' == FPL ']'
+ for fname in '$(find . -name "*.DAT")'
Iを"calType = $ 'V \ r'に6行の出力の下からドル記号があるのがなぜ分かりません。次に、主な質問はif文が存在しない理由です私はあなたが提供したインスタンスが文字列と変数をマッチさせていないことを認識していますが、同じことを認識しています。 "#:。 $ calTypeが "FPL \ r"のときに発生します。
ありがとうございます。
ベスト、あなたはそれらをすべて処理する前に、UNIX形式にファイルを変換するために使用することができDOS2UNIX スミット
コードには多くの問題があります。明らかなものを修正するためにshellcheck.netを通して実行してください。 – chepner
ファイルにDOSスタイルの行終端文字が含まれているため、文字列の末尾に改行が付きます( '\ r')。文字列を 'tr -d '\ r"に通してそれを削除することができます。 –