2017-10-19 61 views
2

好了,初學者在這裏某個值:
如何實現以下目標:如何檢查文件的大小比猛砸

  • 我需要檢查一個文件的大小
  • 然後使用if條件和相應的條件語句

到目前爲止,我有這個文件的大小比較固定數量如下:

#!/bin/bash 

# File to consider 
FILENAME=./testfile.txt 

# MAXSIZE is 5 MB 
MAXSIZE = 500000 

# Get file size 
FILESIZE=$(stat -c%s "$FILENAME") 
# Checkpoint 
echo "Size of $FILENAME = $FILESIZE bytes." 

# The following doesn't work 
if [ (($FILESIZE > MAXSIZE)) ]; then 
    echo "nope" 
else 
    echo "fine" 
fi 

有了這個代碼,我可以在變量$ FILESIZE獲取文件名,但我無法將其與固定整數值進行比較。

編輯

#!/bin/bash 
filename=./testfile.txt 
maxsize=5 
filesize=$(stat -c%s "$filename") 
echo "Size of $filename = $filesize bytes." 

if ((filesize > maxsize)); then 
    echo "nope" 
else 
    echo "fine" 
fi 
+2

'如果混淆它們[(($ FILESIZE> MAXSIZE))];' - >'if((FILESIZE> MAXSIZE));'算術運算符可以作爲條件表達式。 (你不需要內'$''((?))') –

回答

5

夫婦的語法問題。

  1. bash變量的定義不走的空間應該已經MAXSIZE=500000,沒有空格
  2. 的方式比較操作做是不正確。而不是if [ (($FILESIZE > MAXSIZE)) ];。你很可能單獨使用的bash自己的算術運算符和跳過[運營商只是if ((FILESIZE > MAXSIZE)); then

如果你擔心你的腳本語法問題,使用shellcheck的語法檢查腳本並修復錯誤所看到從中。在bash


作爲一般的編碼習慣小寫用戶定義的變量,以避免與它們由shell解釋用於不同目的的特殊環境變量(例如$HOME$SHELL

+1

良好的漁獲的空間... –

+1

@Inian所以,我只是沒有被運行在chmod + X上的文件,並運行它直接使用'./file.sh',它工作正常。我以前使用'sh。/ filename.sh'命令運行。我對這兩者之間的主要區別是什麼感到困惑。我的bash版本是:'GNU bash,版本4.3.8(1) - 發行版(x86_64-pc-linux-gnu) ' – bshakya