Почему bash использует -ge для сравнения вместо ==?

380
Scott

Поэтому я собираюсь добавить предупреждение о нехватке места на жестком диске на мой домашний сервер. Мне нравится внешний вид, после чего приходит от сюда :

ADMIN="yourmail@example.com" # set alert-level 90 % standard ALERT=10 df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output; do usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) partition=$(echo $output | awk '{ print $2 }' ) if [ $usep -ge $ALERT ]; then echo "space low on \"$partition ($usep%)\", on server $(hostname) at $(date)" | mail -s "Alert: Free space low, $usep % used on $partition" $ADMIN fi done 

Поскольку я считаю разумным понимать любой сценарий, который вы запускаете перед тем, как запускать его, я смотрел справочные страницы, чтобы выяснить, как работает каждый из отдельных разделов программы, и это выглядит довольно просто. Единственное, чего я не понимаю, - это -geфлаг в ifусловном выражении. Согласно введению bash для страницы if они оба будут иметь значение true, если «файл существует». Как эта логика проходит правда, когда я сравниваю две переменные. В других языках программирования я бы использовал ==синтаксис. Точно так же почему мы сравниваем значения 90(как сообщает df) с10 которой является переменнойALERTЯ полагаю, это как-то связано с тем, как условные оценки? У меня нет оснований полагать, что этот код не будет работать, я просто хотел бы знать, почему, прежде чем добавлять его в сценарий.

Благодарю.

0
В этом контексте -ge означает больше или равно. См. Последний абзац здесь: http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html. Argonauts 7 лет назад 2
Что говорит эхо-линия, что делает? random 7 лет назад 0
@ Argonauts, кажется, я не прокрутил достаточно хорошо, спасибо Scott 7 лет назад 0
Может быть, это не bash, может быть, это sh / dash (я не думаю, что dash использует `==`) Xen2050 7 лет назад 0

0 ответов на вопрос

Похожие вопросы