messaging.sh: linha 29: [: missing ']'

5

Eu não sei se isso é ruim ou o que isso significa. Meu script ainda parece funcionar bem, mas devo corrigi-lo?

#!/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]="[email protected]"

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
    
por Jacob_ 12.06.2015 / 17:38

3 respostas

10

messaging.sh: linha 29: [: ausente ']'

Você está usando o seguinte:

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

No entanto, o comando acima está faltando um space antes de ] , deve ser:

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

As regras básicas das condições

When you start writing and using your own conditions, there are some rules you should know to prevent getting errors that are hard to trace. Here follow three important ones:

     
  1. Sempre mantenha espaços entre os colchetes e a verificação / comparação real. O seguinte não funciona:

         

    if [$foo -ge 3]; then

         

    Bash vai reclamar sobre um "desaparecimento"] ".

  2.   

Fonte Condições no bash scripting (se declarações)

    
por 12.06.2015 / 17:46
5

Você está perdendo um único espaço.

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

Outro exemplo:

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

$ if [ "a" == "a" ]; then echo "yes"; else echo "no"; fi
yes
    
por 12.06.2015 / 17:43
2

Falta o espaço antes da opção ] . Outra opção de formato é:

$ [ "a" == "a" ] && echo "yes" || echo "no"
    
por 12.06.2015 / 20:41