文字列を整数に変換して比較

文字列を整数に変換して比較

ディレクトリのファイルサイズをMB単位で取得し、さまざまなサイズのディレクトリでさまざまな操作を実行したいと思います。私のコードは次のとおりです

file_size_with_path=$(du -sb $file_path)
file_size=$(echo "$file_size_with_path" | tr -d -c 0-9)
echo "$file_size"
## if directory size is betweem 1GB and 10 GB:
if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]; then   
    echo "yoyo1"
    block_size=$(($file_size/120))
    block_size_in_bytes=$(($block_size*1024))
    stripe_size_in_bytes=$((block_size_in_bytes/4))
## if directory size is greater than 10 GB
elif [[ ($file_size > 10737418240 ) ]] ; then
    echo "yoyo2"
    block_size_in_bytes="67108864"
    stripe_size_in_bytes=$((block_size_in_bytes/4))
##if directory size is less than 1 GB
elif [[ ($file_size < 1073741824 ) ]] ; then
    echo "yoyo3"
    block_size_in_bytes="16777216"
    stripe_size_in_bytes=$((block_size_in_bytes/4))
fi

サイズが3318222のディレクトリに対して実行されると、コードは2番目のelifブロック(yoyo2を印刷)に入りますが、3番目のelifブロックに移動してyoyo3を印刷する必要があります。誰かが文字列を整数に変換して比較する方法を提案してください。

私は成功せずに変数と数字の周りに二重引用符を入れようとしました。他の回答を見ましたが、何も機能しないようです。

ありがとうございます。

答え1

ここで仮定しましょうbash

代わりに

if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]

使用できる

if (( file_size < 10737418240 )) && (( file_size > 1073741824 ))

これは、変数名が整数として解釈され、演算子などが通常整数と同じように機能する(( ... ))算術計算です。<>

そして

[[ $file_size < 10737418240 ]]

現在のロケールのソート順で2つの文字列を比較しています$LC_COLLATE

答え2

bashペアでテストを使用している場合は、数字「より大きい」と「より小さい」を比較するには、とを[[ ]]使用します。文字列比較の場合、これは実際には正しいです。-gt-lt<>[[ 1000000 < 90 ]]

関連情報