5

Я не знаю, плохо это или плохо. Мой сценарий все еще работает нормально, но я должен это исправить?

#!/bin/sh
#This script will send text and maybe images to other computers via ssh and scp.
#Configuration files in same folder

source /Users/jacobgarby/Desktop/messaging/messages.cfg
TIME=$(date +"%H:%M:%S")
CONNECTED[0]="mainmini@192.168.1.65"

if [ -d messages.log ]; then
    :
else
    touch messages.log
fi

read MSG

if [ "$MSG" == "!help" ]; then
    echo ; echo "!clear   Clear's your personal chat log."
    echo "!ban [usrname]    Prevents a user from entering this chat IN DEV."
else
    echo "$TIME | $USER | $MSG" >> messages.log; echo   >> messages.log; echo   >> messages.log
    tail messages.log
fi

for CONNECTION in CONNECTED; do
    echo "It works"
done

if [ "alerttype" == "notification"]; then
    osascript -e 'display notification "You have recieved a message!" with title "Message"'
else
    osascript -e 'display dialog "You have recieved a message!" with title "Message"'
fi

3 ответа3

10

messaging.sh: строка 29: [: отсутствует ']'

Вы используете следующее:

if [ "alerttype" == "notification"]; then`

Тем не менее, в приведенной выше команде пропущен space ] , это должно быть:

if [ "alerttype" == "notification" ]; then
                                  ^

Основные правила условий

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

  1. Всегда оставляйте пробелы между скобками и фактической проверкой / сравнением. Следующее не будет работать:

    if [$foo -ge 3]; then

    Баш будет жаловаться на «пропавших без вести»].

Исходные условия в сценариях bash (если операторы)

5

Вам не хватает ни одного пробела.

#BEFORE
if [ "alerttype" == "notification"]; then
#AFTER
if [ "alerttype" == "notification" ]; then
#                                 ^

Другой пример:

$ if [ "a" == "a"]; then echo "yes"; else echo "no"; fi
-bash: [: missing `]'
no

$ if [ "a" == "a" ]; then echo "yes"; else echo "no"; fi
yes
2

Отсутствует пробел перед символом ] Также есть другой формат:

$ [ "a" == "a" ] && echo "yes" || echo "no"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .