2010-06-16 2 views
0

Я новичок в BASH, поэтому, пожалуйста, не возражайте против моих глупых вопросов, потому что я не могу получить какие-либо хорошие источники, чтобы узнать это.Simple Bash Programming

Я хочу создать сценарий для отображения имени файла и его размера. Это то, что код похож

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

ответ

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) `` `для захвата вывода команды просто bec ause их легче в гнездо.
  • Если вы уже поставили $1 в $filename, вы можете также использовать $filename с этого момента ($1 в awk это другое животное).
  • Я предпочитаю, чтобы поместить все мои переменные внутри ${} так, что это очевидно, как читатель и оболочки, что ${var}X является $var приложено X, а не $ varX быть несуществующими $ {varX}.

Это действительно личные предпочтения, но, как и у всех моих личных предпочтений, я считаю их лучшими практиками для всей ИТ-индустрии :-)

3

Используйте стат (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

Мне нравится это решение, самое лучшее: Он использует только один внешний инструмент (стат), в отличие от других решения, которые используют два. –

0

Вы можете использовать AWK разделить вывод на ем первое пространство, следующим образом:

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

cut -f 1 разделяет входные данные с помощью вкладок, а затем выводит первое поле (т.е. она возвращает каждую строку du выход до символа табуляции.).

0

Вместо использования du -b $1du -b $1 | cut -f 1. Он будет включать только первое поле вывода команды du, поэтому указывается только размер файла.

0

Вы можете использовать awk для выбора первого столбца данных.

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