문자열을 정수로 변환하고 비교

문자열을 정수로 변환하고 비교

디렉터리의 파일 크기를 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인 디렉터리에 대해 실행되면 코드는 두 번째 elif 블록(yoyo2를 인쇄함)으로 들어가지만 세 번째 elif 블록으로 가서 yoyo3을 인쇄해야 합니다. 누군가 문자열을 정수로 변환하고 비교하는 방법을 제안해 주세요.

나는 성공하지 못한 채 변수와 숫자 주위에 큰따옴표를 넣으려고 했습니다. 다른 답변을 보았지만 아무것도 작동하지 않는 것 같습니다.

감사해요.

답변1

여기에서 가정해보자 bash.

대신에

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

당신이 사용할 수있는

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

이는 변수 이름이 정수로 해석되고 연산자 등이 일반적으로 정수와 마찬가지로 작동하는 (( ... ))산술 계산입니다 .<>

그리고

[[ $file_size < 10737418240 ]]

에 따라 현재 로케일의 정렬 순서로 두 문자열을 비교하고 있습니다 $LC_COLLATE.

답변2

bash쌍으로 테스트를 사용하는 경우 숫자 "보다 큼"과 "보다 작음"을 비교하려면 및 를 [[ ]]사용하세요 . 문자열 비교의 경우 이는 실제로 정확합니다.-gt-lt<>[[ 1000000 < 90 ]]

관련 정보