Простое основанное на флаге сравнение в Linux

Определяет идентификатор раздела как SWAP Linux . Запись раздела в главной записи Master Boot устройства содержит шестнадцатеричное значение этого типа раздела. В этом случае это будет 0x82 .

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

Например, в операционной системе Linux ID 0x82 означает своп и в Solaris он определяет нормальный раздел.

Однако тип раздела просто отмечает раздел. Вы можете создать пространство Linux Swap в таком разделов с Mkswap .

-121--205475-

Линия ACL может быть следующей:

deny condition = ${lookup{$localpart}nwildlsearch{/path/to/the/black.list}{yes}{no}}

, в то время как , в то время как Black.List содержит PCRE Regexes по одному на линию:

^.*[0-9].*
^.*[!@#$%^&*()_+].*
^.*sales.*

1
26.03.2015, 17:21
3 ответа

Попробуйте с помощью , если $FLAG_Control && [ -d /path/to/dir ]; ... . Обратите внимание, что скобки не являются частью синтаксиса для if; в этом случае вы хотите, чтобы $FLAG_Control интерпретировалась как команда (true или false), и это хорошо сыграет с && и другим пунктом [ ... ]. (Это предполагает, что ваша переменная всегда устанавливается либо в true, либо в false. )

Причину, по которой Ваш начальный тест не делает того, что Вы имели в виду, можно увидеть в документации к test (также известной как [):

-n STRING
       the length of STRING is nonzero

STRING equivalent to -n STRING

Так как false здесь не имеет особого значения, то она просто воспринимается как непустая строка, которая интерпретируется как истинное значение.

1
28.01.2020, 01:42

Последние несколько месяцев я учусь писать сценарии бэша. Что я узнал, так это то, что в bash нет булевых переменных. Однако, это не значит, что нет никаких булевых значений.

If/then ищет 1 или 0. Now.... здесь предостережение: 0 - правда, а все остальное - ложь. Например, когда вы проверяете, существует ли непосредственно a, результат возвращается как 0, а не 1.

Если вы получите какой-либо код ошибки от вызываемой функции, вы можете поймать эту ошибку в ловушку.

Итак, попробуйте вместо этого:

FLAG_Control=1
if [ $FLAG_Control ] && [ -d /path/to/dir ];then
   echo "Run script.."
fi
0
28.01.2020, 01:42

Ближайшим к истинным значением для оболочки переменная является значение set . От него также зависят некоторые собственные свойства параметров. Например:

FLAG=
[ -d "${FLAG:+$HOME}" ] || ! echo \
either \$HOME is not a directory or \$FLAG is null or unset

Выше $ FLAG условно расширяется до значения $ HOME , только если оно установлено, а не null. Есть несколько вариантов этого, но общая суть в том, что значение параметра не всегда так важно, как то, имеет ли параметр значение . Установка ФЛАГ на любое значение, указанное выше, приведет к истинному возврату из теста , а не к отказу.

-1
28.01.2020, 01:42

Теги

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