Intereting Posts
Прямое движение между двумя Firewalld интерфейсами в одной и той же зоне Описываются ли дескрипторы файлов при переустановке файловой системы? Создание python с поддержкой openssl Как создать настроенный дистрибутив на основе Debian? Как удалить .deb, установленный с помощью dpkg? xterm не отображает unicode Не удается установить долю samba: Ошибка монтирования (22) Невозможно скомпилировать glibc для 64-битной системы В какой ситуации было бы выгоднее использовать AutoFS поверх vfstab для акций, предназначенных только для одного сервера? Как проверить umask для всех пользователей под Linux? Почему ленточное устройство, например «/ dev / st0», не использует команды типа «cp» для копирования содержимого? Ошибка установки Firefox Трафик определенного трафика на определенный интерфейс Как применить команду awk для всех полей, за исключением нескольких определенных строк Невозможно выполнить KDE Dolphin из веб-скрипта PHP, но работает для всех других программ X

Условный оператор, «ожидаемый унарный оператор»

У меня возникла проблема с примером сценария, который приведен в учебнике «Руководство по Unix и системному администрированию». Скрипт ниже … Я получаю сообщение об ошибке logscript: line 8: [: 1: unary operator expected .

 # The log level is set in the global variable LOG_LEVEL. The choices # are, from most to least severe. Error, Warning, Info, and Debug. function logMsg { message_level=$1 message_itself=$2 if [ $message_level -le $LOG_LEVEL ]; then case $message_level in 0) message_level_text="Error";; 1) message_level_text="Warning";; 2) message_level_text="Info";; 3)message_level_text="Debug";; *) message_level_text="Other" esac echo "${message_level_text}: $message_itself" fi } # Main program starts here logMsg $1 $2 

Любые идеи относительно того, почему эта ошибка появляется?

Эта ошибка LOG_LEVEL тем, что LOG_LEVEL не определен. Вы не предоставили нам никакой информации о том, как вы используете эту функцию (ни какую оболочку вы используете или какую операционную систему), но ошибка исчезнет, ​​если установлен LOG_LEVEL .

Например:

 $ foo=""; [ 1 -le $foo ] && echo yes bash: [: 1: unary operator expected 

Пока, если $foo установлен:

 $ foo="1"; [ 1 -le $foo ] && echo yes yes 

Как говорится в комментарии, убедитесь, что ваша переменная LOG_LEVEL установлена, и вызовите ваш скрипт с целым числом в качестве первого аргумента (так как if собирается сравнивать целые числа). Что-то вроде:

 export LOG_LEVEL=3 ./my_script 2 AnyMessage 

Вы можете попробовать следующее:

 if [[ $message_level -le $LOG_LEVEL ]]