ワイルドカードはif文では解釈されません。

ワイルドカードはif文では解釈されません。

現在、次のスクリプトを作成しています。このコードは、ユーザーがディレクトリに入力したファイル名を探します。スクリプトはまず入力ファイルがgzipであることを確認し、そうであれば適切な確認を実行します。ファイルがgzipに圧縮されていない場合、互換性のないファイルテキストが返されます。

私が経験している問題はオンラインです7。ファイル拡張子に関係なく、最終出力と互換性のないファイルが受信されます。

#!/bin/bash
DATE=$(date +%Y-%m-%d)
L0_Report_Generator=("/home/ubuntu/$gzip_file")
echo -n "Enter File Directory:"$gzip_file 
read  $gzip_file
for gzip_file in {$L0_Report_Generator}; do
  if [[ $gzip_file = "test_sub"*"gz" ]] #Check file extension for gzip compression
      then
         gunzip $gzip_file
         echo "file Level 0 QC Check"
         echo ${DATE}
         echo "File Header"
         cat $gzip_file | head
         echo "Total Records"
         cat $gzip_file | wc -l
         echo "File Unique Records Size"
         cat $L0_Report_Generator | sort -u | wc -l
         rm $gzip_file 
    else [[ $gzip_file != "test_sub"*"gz" ]] #If file is anything other than .gz and csv - rort will not run
       then
         echo "incompatible file"
         fi
done

ベストアンサー1

ifステートメントでワイルドカード式を使用して ".gz"ファイル拡張子を確認するには、次の式を使用できます。

if [[ "${gzip_file}" = *.gz ]]; then echo true; else echo false; fi

次の方法でこれをテストできます。

if [[ "file.gz" = *.gz ]]; then echo true; else echo false; fi

そして:

if [[ "file.txt" = *.gz ]]; then echo true; else echo false; fi

最初の例ではtrue出力を生成し、2番目の例では出力を生成しますfalse

それでは、コードを見てみましょう。 if文には次の条件式があります。

[[ $gzip_file = "test_sub"*"gz" ]]

具体的には、一致パターンの部分文字列として「test_sub」が含まれます。削除してみてください。

おすすめ記事