Bash 腳本將「字串」轉換為數字

Bash 腳本將「字串」轉換為數字

我需要將字串更改為整數,因為我用數字檢查檔案的大小(使用 stat -c%s $filename 提取),請遵循完整的腳本:

#!/bin/bash

# Variable that contain path destination file
path=/sobstitude

# Variable for size
size=1000

# Loop for file scan
for filename in /test/*;
do
    # Take the size of file
    filesize=$(stat -c%s $filename)

# Check if the file is empty
if [ $filesize > $size ]
then

    # Replace file
    mv $filename $path

fi
done

exit 0;

答案1

bash/變數中sh包含字串,沒有嚴格的整數概念。字串可能看起來像整數,這就足夠了。

stat -c%s $filename應該回傳一個看起來像整數的字串。

在您的情況下,主要問題在於重定向運算子>(您現在可能有工作目錄中名稱為數字的檔案)。這個片段:

[ $檔案大小 > $大小 ]

應該

[ "$filesize" -gt "$size" ]

在變數替換和命令替換周圍使用雙引號

答案2

無需“轉換”資料型別。您可以使用-gt-lt來比較數字:

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller

>原則上並沒有錯。您可以使用算術表達式來執行比較。

我用它來[[代替[擴充功能

請注意,所有變數擴展都應該用雙引號引起來。特別是對於$filenameand $path,如果其中任何一個包含空格,您的腳本將會失敗。

答案3

夥計們,我在更改後解決了這個問題:

if ((filesize > size))

正在工作,感謝支持

相關內容