2010-06-16 38 views
0

我是BASH的新手,所以請不要介意我的愚蠢問題,因爲我無法獲得任何好的資源來學習。簡單的Bash編程

我想創建一個腳本來顯示文件名及其大小。這是代碼是什麼樣子

filename=$1 
if [ -f $filename ]; then 
    filesize=`du -b $1` 
    echo "The name of file is $1" 
    echo "Its size is $filesize" 
else 
    echo "The file specified doesnot exists" 
fi 

輸出是這樣的

$ ./filesize.sh aa 
The name of file is aa 
Its size is 88 aa 

但在最後一行我不想顯示文件名。我怎麼做 ? 我想用wc做同樣的事情。

+2

這裏有一個很好的來源http://www.ibm.com/developerworks/library/l-bash.html – helpermethod 2010-06-16 10:13:44

回答

0

所有水平的問題都在這裏接受。

您可以使用awk只得到第一個字段:

du -b /path/to/file | awk '{print $1}' 

你的腳本將然後是這樣的:

filename=$1 
if [ -f ${filename} ]; then 
    filesize=$(du -b ${filename} | awk '{print $1}') 
    echo "The name of file is ${filename}" 
    echo "Its size is ${filesize}" 
else 
    echo "The file specified does not exists" 
fi 

你會發現我已經改變了一些其他的事情以及:

  • 我更喜歡$(X)到'X`來捕獲命令的輸出簡單地bec因爲它們更容易嵌套。
  • 如果您已經把$1$filename,你不妨使用$filename從(在awk$1是一個不同的野獸)這一點。
  • 我傾向於將所有變量放在${}之內,以便讀者和外殼都明白${var}X$var附加了X,而不是$ varX不存在的$ {varX}。

這些是真正的個人喜好,但正如我所有的個人喜好,我認爲他們整個IT行業的最佳實踐:-)

3

使用stat(1)

filename=$1 
if [ -f $filename ]; then 
    filesize=`stat -c %s $1` 
    echo "The name of file is $1" 
    echo "Its size is $filesize" 
else 
    echo "The file specified doesnot exists" 
fi 

參見man 1 stat

+0

我喜歡這個解決方案最好的:它僅使用一個外部工具(STAT),不像其他使用兩種解決方案。 – 2010-06-16 16:12:17

0

你可以使用AWK在分裂的杜輸出第一空間,如下所示:

filesize=`du -b $1 | awk '{ print $1; }'` 
1
filesize=`du -b $1 | cut -f 1` 

cut -f 1由製表符分割其輸入,然後輸出第一場(即,其返回的每一行的輸出到第一個製表符字符。)。

0

而不是使用du -b $1使用du -b $1 | cut -f 1。它將只包含du命令輸出的第一個字段,因此只報告文件的大小。

0

您可以使用awk挑出第一列數據。

filesize=`du -b $1 | awk '{print $1}'`