Получаю ошибку [: missing `]' при выполнение скрипта

Получаю ошибку [: missing `]' при выполнение скрипта

20.06.2016 02:03:28 Просмотров 17 Источник

Всем привет. Вроде как не особо сложный скрипт, но на строку export CMD_STATUS=2 ругается [: missing `]'. Вот кусок листинга скрипта:

#!/bin/bash

CMD_STATUS=1

check () {
  if [ $1 -ne 0 ]; then
      export CMD_STATUS=2
  fi
}

EXECUTION_LOG="$DIR/log/$(date +%Y-%m-%d_%H:%M:%S).log"

exec > >(tee $EXECUTION_LOG) 2>&1

ATTEMPT=1
IN_ATTEMPTS=10

while [ "$ATTEMPT" -le "$IN_ATTEMPTS" ]
do

  CMD_STATUS=1

  $DIR/lock.sh 
  check $?

  if [ $? -eq 0 ]; then
    #выполняем различные команды (запускаем sh-скрипты)
    check $?

    $DIR/unlock.sh
    check $?
  fi

  if [ $CMD_STATUS -eq 2 ]; then
    let "ATTEMPT += IN_ATTEMPTS"
  else
    let "ATTEMPT += 1"        
  fi
done

EXIT_CODE=0
if [ $СMD_STATUS -eq 2 ]; then
  EXIT_CODE=1
fi

exit $EXIT_CODE

Ну и что я не так сделал? Помогите, пожалуйста.

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/536830/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d1%8e-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d1%83-missing-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0#comment676042_536830
Спасибо. Попробую "погонять" скрипт на разных данных.

Ответы - Получаю ошибку [: missing `]' при выполнение скрипта / Получаю ошибку [: missing `]' при выполнение скрипта

Является ответом!
Slava Semushin

20.06.2016 03:43:37

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

if [ "$1" -ne 0 ]; then
https://ru.stackoverflow.com/questions/536830/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d1%8e-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d1%83-missing-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0/536886#comment675225_536886
Ну, тут это совсем ни при чем (сравниваются числа). А для строк, да, стоит. Причем даже лучше добавлять один и тот же символ в обеих частях, например if [ "X$1" == "X" ]` для проверки, что $1 пусто.
https://ru.stackoverflow.com/questions/536830/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d1%8e-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d1%83-missing-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0/536886#comment675244_536886
Вы правы. Если бы это был случай с кавычками, то ошибка была бы [: -ne: unary operator expected. Чтобы добиться ошибки как у автора вопроса, нужно убрать закрывающую квадратную скобку: if [ $? -ne $1 ; then Вероятно, автор нам показал старый код либо новую ошибку. Еще есть вариант по доктору Хаузу, что он банально нас обманул :)
https://ru.stackoverflow.com/questions/536830/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d1%8e-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d1%83-missing-%d0%bf%d1%80%d0%b8-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0/536886#comment676041_536886
Не обманывал я вас :| Со скобками все в порядке.
Закрыть X