Существуют скалы дистрибутив Linux, который сделан для кластеризации и основан на CentOS/RHEL.
Сильная сторона скал - то, что это будет по большей части управлять и делать много minutia для Вас.
Если я должен был вскопать оборотные стороны
Некоторые исторические оболочки реализовали очень простой синтаксический анализатор, который мог запутаться вещами как [ -n = "" ]
где первый операнд к =
похож на оператор и проанализировал бы это как [ -n = ]
или вызовите синтаксическую ошибку. В [ "x$1" = x"" ]
, x
префикс гарантирует это x"$1"
не может возможно быть похожим на оператор, и таким образом, единственный способ, которым оболочка может проанализировать этот тест, путем обработки =
как бинарный оператор.
Все современные оболочки и даже большинство более старых оболочек все еще в операции, следуют правилам POSIX, которые передают под мандат это все проверяемые выражения до 4 слов быть проанализированными правильно. Так [ -z "$1" ]
надлежащий способ протестировать если $1
пусто, и [ "$x" = "$y" ]
надлежащий путь состоит в том, чтобы протестировать равенство двух переменных.
Даже некоторые текущие оболочки могут запутаться с более длительными выражениями, и несколько выражений на самом деле неоднозначны, поэтому избегайте использования -a
и -o
операторы, чтобы создать более длинные булевы тесты и вместо этого использовать отдельные вызовы для [
и собственная оболочка &&
и ||
булевы операторы.
Согласно http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quoting-guide.html, -z
тест небезопасен в некоторых реализациях, по-видимому, когда "интересные" строки как "-o a=a"
тестируются.
Вышеупомянутые тесты также вызовут ошибку, если Вы будете работать с "набором-u", или "устанавливает-o nounset"
Более стабильный способ проверить на пустую переменную состоял бы в том, чтобы использовать расширение параметра:
$ MYVAR= {MYVAR:-"плохо оценивают"}
Этот метод работает на традиционную оболочку Bourne, а также ksh и удар.
function isBlank {
valueNoSpaces=$(echo "$@" | tr -d ' ')
if [ "$valueNoSpaces" == null ] || [ -z "$valueNoSpaces" ]
then
echo true ;
else
echo "" ;
fi
}
#Test
if [ $(isBlank " ") ]
then
echo "isBlank \" \" : it's blank"
else
echo " isBlank \" \": it is not blank"
fi
if [ $(isBlank "abc") ]
then
echo "isBlank \"abc\" : it's blank"
else
echo "isBlank \"abc\" :it is not blank"
fi
if [ $(isBlank null) ]
then
echo "isBlank null : it's blank"
else
echo "isBlank null : it is not blank"
fi
if [ $(isBlank "") ]
then
echo "isBlank \"\" : it's blank"
else
echo "isBlank \"\" : it is not blank"
fi
#Result
isBlank " " : it's blank
isBlank "abc" :it is not blank
isBlank null : it's blank
isBlank "" : it's blank
sh
s на некоторых коммерческих Нельдах все еще имеют проблему. Посмотрите здесь для деталей. – Stéphane Chazelas 27.11.2012, 23:00[ -z "$1" ]
надлежащий способ протестировать если$1
пусто.sh -c '[ -z "$1" ]' ''; sh -c '[ -z "$1" ]'
- оба возврата 0, но во втором случае$1
не может быть пустым, потому что это не существует. – mikeserv 29.07.2014, 18:58