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