Как я могу извлечь определенное число из df в bash?

Моя цель - проверить, достаточно ли места на моем диске, каждый раз, когда мой скрипт (bash) выполняет шаг.

Выполнение df; echo $? распечаток:

Dateisystem     1K-Blöcke    Benutzt Verfügbar Verw% Eingehängt auf
/dev/sdc4      1869858440 1680951776  93900284   95% /mnt/dd
0

0 является результатом этой команды. В моем случае я хочу только 93900284 в переменной или как результат.

Я уже прочитал man df.


person Hert    schedule 01.10.2016    source источник
comment
...чтобы пометить ответ как тот, который помог вам, установите флажок рядом с ним.   -  person Charles Duffy    schedule 02.10.2016


Ответы (3)


df --output=avail /path/to/where/you/want/to/write | tail -n 1

Кстати: «возвраты» bash (в данном случае 0 == success) - это коды выхода, то, как вы это формулируете, похоже, вы пытаетесь зафиксировать это, а не вывод. В этом случае вы, можете прочитать это.

person Wrikken    schedule 01.10.2016
comment
df от GNU не единственный, который когда-либо будет работать на ядре Linux — в конце концов, busybox тоже работает в Linux; таким образом, может не помешать включить опцию, которая работает с инструментами, отличными от GNU. OTOH, если бы вы указали OP на источник соответствующих чисел в sysfs, вообще не было бы зависимости от какого-либо внешнего инструмента. - person Charles Duffy; 01.10.2016
comment
Хе-хе, вы знаете, я смотрел на вариант sysfs, но я не знал его OTOH и поленился, вы правильно назвали меня на этом :) Голосование за закрытие, поскольку дубликат, который вы нашли. - person Wrikken; 02.10.2016

Вы можете использовать awk для извлечения подходящего поля из вывода:

BASH_VAR=`df | awk '/\/dev\/sda4/{print $4;}''`
person fghj    schedule 01.10.2016
comment
grep, за которым следует awk, требуется редко — пусть awk выбирает и строку, и поле. - person Mark Setchell; 01.10.2016
comment
Кстати, локальные переменные оболочки обычно должны иметь имена, содержащие хотя бы один символ нижнего регистра. POSIX указывает, что переменные среды, имеющие значение для системы или оболочки, всегда должны иметь имена, полностью написанные в верхнем регистре; использование имен в нижнем регистре для ваших собственных переменных означает, что вы никогда не перезапишете что-то важное случайно (риск, который существует, потому что создание переменной оболочки с тем же именем, что и переменная среды, перезаписывает последнюю). См. pubs.opengroup.org/onlinepubs/009695399/basedefs/. - person Charles Duffy; 02.10.2016

Если вы хотите отображать только доступное дисковое пространство, вы можете использовать следующую команду

 df -k /dev/sdc4 | tail -1 | awk '{print $4}'
person yudori    schedule 01.10.2016
comment
Здесь можно исключить tail, заставив awk выполнять больше работы: df -k /dev/sdc4 | awk 'NR == 2 { print $4 }' - person Charles Duffy; 01.10.2016
comment
это было полезно для меня спасибо :) - person rezshar; 08.07.2021