パラメータとして渡されたファイルのサイズをメガバイト数とどのように比較しますか?

パラメータとして渡されたファイルのサイズをメガバイト数とどのように比較しますか?

ファイルまたはディレクトリをパラメータとして使用するスクリプトがあり、ファイルをメガバイト単位で比較して、ファイルが1 MB以上、小さいか等しいことを確認します。

私の考えに対する答えは次のとおりです。

#!/bin/bash

FILE=$1 
export FILE1 

if [ -f$1 ];

then  
        echo "Hello world!" 

fi 

  if [ $# -lt 1 ]; then 
       echo "This file is less than 1 megabyte"
fi

このファイルをパラメータとして渡して1MB未満であることを確認したいと思います。今、$# -lt 1が実際には1MBより小さいか、整数1より小さいかを知る必要があります。

答え1

一部のコメント作成者/回答者が言ったように、スクリプトは着信ファイルのサイズを取得できません。メガバイトと比較するには、これを行う必要があります。

1つのオプションはstat次のコマンドです。

bytes=$(stat -c %s filename_here)

別のオプションはwc次のコマンドです。

bytes=$(wc -c < filename_here)

次に、これを1MBと比較しようとします。 bash算術は整数に制限されているため、小数と比較しようとすると失敗する可能性があります。代わりに1048576バイトと比較してください。

要約すると、次のようになります。

#!/bin/bash

if [ -f "$1" ];
then  
  echo "Hello world!"
  bytes=$(stat -c %s "$1")
  if [ "$bytes" -lt 1048576 ]; then 
    echo "This file is less than 1 megabyte"
  fi
fi

サイズの数を最初のifステートメントに移動しました。存在しないファイルのサイズを確認することは意味がありません。また、パラメータとして他の操作を実行しない限り、他の変数名を使用する必要はありません$1

答え2

スクリプトに論理エラーと構文エラーがあります。

  • 割り当ててFILEエクスポートしますFILE1(有害ではありませんが意味がありません)。
  • 使用しなくても使用しませんFILEFILE1同じ)。
  • 「条件マスター」とファイル名の間にスペースが必要です。[ -f$1 ]
  • $#ファイルサイズではなくスクリプトのパラメータ数を生成します(Filipe Brandenburgerがすでに指摘したように)。
  • statあなたに提供される情報に加えて、代替情報源が必要です。du -b file

関連情報