Strona 1 z 1

[+] Bash - prosty skrypt if-else

: 12 maja 2012, 17:30
autor: czakll
Witam serdecznie.
P
iszę prosty skrypt porównujący zmienne:

Kod: Zaznacz cały

#!/bin/bash
CURRENT_IP="2.3.4.5"
FORWARD_IP="1.2.3.4"
echo "current: $CURRENT_IP"
echo "forward: $FORWARD_IP"


if [ -z $FORWARD_IP && -z $CURRENT_IP ]; then
        echo "error"
        elif [ $CURRENT_IP != $FORWARD_IP ]; then
                echo  'reset'
fi

Po jego wykonaniu otrzymuję:

Kod: Zaznacz cały

root@router:~# sh przekierowania.sh
current: 2.3.4.5
forward: 1.2.3.4
[: 12: missing ]
reset
Co jest nie tak, że pojawia się informacja o brakującym nawiasie?

Pozdrawiam.

: 12 maja 2012, 19:05
autor: DaVidoSS
Wykonanie tego skryptu ma znaczenie.
W Debianie sh linkuje do interpretatora /bin/dash (o czym sam się dowiedziałem niedawno dzięki uprzejmości Bastian)

Jeżeli koniecznie interpreterem ma pozostać dash (sh), to należy to zrobić tak:

Kod: Zaznacz cały

#!/bin/sh
CURRENT_IP="2.3.4.5"
FORWARD_IP="1.2.3.4"
echo "current: $CURRENT_IP"
echo "forward: $FORWARD_IP"


if [ -z $FORWARD_IP ] && [ -z $CURRENT_IP ]; then
        echo "error"
        elif [ $CURRENT_IP  !=  $FORWARD_IP ]; then
                echo  "reset"
fi


Jeżeli ma nim pozostać bash (na co wskazuje hashbang #!/bin/bash), to należy to zrobić tak:

Kod: Zaznacz cały


#!/bin/bash
CURRENT_IP="2.3.4.5"
FORWARD_IP="1.2.3.4"
echo "current: $CURRENT_IP"
echo "forward: $FORWARD_IP"


if [[ -z $FORWARD_IP && -z $CURRENT_IP ]]; then
        echo "error"
        elif [[ $CURRENT_IP != $FORWARD_IP ]]; then
                echo  "reset"
fi


Oczywiście wykonując użyj bash zamiast sh:

Kod: Zaznacz cały


root@router:~# bash przekierowania.sh
 

: 12 maja 2012, 19:17
autor: czakll
Dziękuję uprzejmie. Pozdrawiam.