[+] Bash - prosty skrypt if-else

Potrzebujesz pomocy z C, C++, perl, python, itp.
czakll
Posty: 90
Rejestracja: 22 listopada 2008, 18:57

[+] Bash - prosty skrypt if-else

Post 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.
Awatar użytkownika
DaVidoSS
Junior Member
Posty: 875
Rejestracja: 06 marca 2010, 11:26
Lokalizacja: ~/

Post 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
 
czakll
Posty: 90
Rejestracja: 22 listopada 2008, 18:57

Post autor: czakll »

Dziękuję uprzejmie. Pozdrawiam.
ODPOWIEDZ