Один лайнер, чтобы узнать, вернул ли что-то grep? [дубликат]

mtools поставляется с утилитой mlabel , которая может выполнять эту работу.

mlabel -N aaaa1111 /dev/sdb1

Кроме того, вам, возможно, придется прибегнуть к шестнадцатеричному редактору. dosfstools позволяет изменять метку только с помощью команды fatlabel (что также делает mlabel , только без идентификатора тома).

Если вы хотите воссоздать файловую систему с нуля, значение также можно указать с помощью mkfs.vfat -i VOLUME-ID .

5
17.04.2017, 06:27
5 ответов

Просто включите проверку статуса выхода после grep , он всегда будет получать статус выхода из последней команды конвейера по умолчанию:

sudo dmidecode | grep -q ThinkPad; echo $?

Используйте -q для подавления любого вывод из grep , поскольку нас интересует только статус выхода.


Вы можете использовать группировку команд, если хотите, но здесь это несколько избыточно:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}
18
27.01.2020, 20:31
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

Вам нужно изменить порядок xargs и test , а также его операнды, чтобы получить то, что вы хотите. Это вернет истинный статус, если есть ненулевые (> 0) ThinkPad, состоящие из строк.

В качестве альтернативы, если вы хотите сохранить порядок операндов тестовой команды, вы можете выполнить

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

А затем в обеих командах проверить значение переменной $? , чтобы определить судьбу успеха grep / сбой, а именно:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi
0
27.01.2020, 20:31

Вдохновленный ответом Хемайла :

sudo dmidecode | grep -q ThinkPad && echo true || echo false

Это вернет true, если ThinkPad найден с помощью grep, и false, если нет .

5
27.01.2020, 20:31

Используя также test и подстановку команд,

test -n "$(sudo dmidecode | grep Thinkpad)" 

,

[ -n "$(sudo dmidecode | grep Thinkpad)" ]
1
27.01.2020, 20:31

Если вы собираетесь использовать этот сценарий оболочки с проверкой if, просто используйте -q, как предложил heemayl:

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

Поскольку блок if проверяет статус выхода команды, мы можем полагаться на статус выхода grep напрямую вместо того, чтобы печатать $? и сравнивать его с чем-то другим.

13
27.01.2020, 20:31

Теги

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