Простое программирование на Bash - PullRequest
0 голосов
/ 16 июня 2010

Я новичок в 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.

Ответы [ 6 ]

3 голосов
/ 16 июня 2010

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

1 голос
/ 16 июня 2010
filesize=`du -b $1 | cut -f 1`

cut -f 1 разбивает свой ввод по вкладкам, а затем выводит первое поле (т. Е. Возвращает каждую строку вывода du вплоть до символа первой клавиши).

0 голосов
/ 16 июня 2010

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

filesize=`du -b $1 | awk '{print $1}'`
0 голосов
/ 16 июня 2010

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

0 голосов
/ 16 июня 2010

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

filesize=`du -b $1 | awk '{ print $1; }'`
0 голосов
/ 16 июня 2010

Все уровни вопроса принимаются здесь.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...