web-dev-qa-db-fra.com

Aide sur if-else en shell

Aidez-moi à écrire une programmation Shell en utilisant ifelse, tout le code possible en utilisant [[ ]], [ ], (( )).
J'ai essayé mais cela ne fonctionne pas (vous pouvez vérifier ma question précédente Opérateurs binaires arithmétiques -gt, -lt donne une erreur mais fonctionne dans un script Shell ).

Voici la version C:

int i = 10, n = 20;

if (i < n)
    printf("i smaller");
else if (i > n)
    printf("n smaller");
else
    printf("same");
5
Sourav

Qu'en est-il de

#!/bin/sh

i=1
n=2

if [ "$i" -gt "$n" ]; then 
    echo "i is bigger" 
Elif [ "$n" -gt "$i" ]; then 
    echo "n is bigger" 
else 
    echo "same" 
fi

seconde...

#!/bin/bash

i=1
n=2

if ((i > n)) ; then 
    echo "i is bigger" 
Elif ((i < n)); then
    echo "n is bigger"
else
    echo "same"
fi

et le dernier ...

#!/bin/bash

i=1
n=2

if [[ $i -gt $n ]]; then 
    echo "i is bigger"
Elif [[ $i -lt $n ]];  then
    echo "n is bigger"
else
    echo "same"
fi
10
Denwerko

J'ai le script suivant pour m'assurer que certains services restent actifs. Il effectue également une sauvegarde mysql tous les jours, vérifie les services en ligne et, si ce n’est pas le cas, ils remontent, etc. Ce n’est pas mon meilleur travail, mais vous donne une idée de la façon d’utiliser IF, et il en va de même pour ELSE IF:

#!/bin/bash
function checker() {
    PID1=$(pidof authserver)
    PID2=$(pidof worldserver)
    PID3=$(date +%k%M)
    PID4=$(date +%d_%m_%y)
    Destiny=/root/bck
    if [ -z "$PID1" ]; then
    echo 3 > /proc/sys/vm/drop_caches
            screen -A -m -d -S auth ./bin/authserver
    fi

    if [ -z "$PID2" ]; then
    echo 3 > /proc/sys/vm/drop_caches
            screen -A -m -d -t titan -S world ./bin/worldserver
    fi

    if [ "$PID3" -eq 230 ]; then
            screen -S world -p titan -X stuff $'anno SERVIDOR CERRADO DENTRO DE 10 MINUTOS POR UNA DURACION DE 30 SEGUNDOS PARA OPTIMIZACIONES\n'
            sleep 300
            screen -S world -p titan -X stuff $'anno SERVIDOR CERRADO DENTRO DE 5 MINUTOS POR UNA DURACION DE 30 SEGUNDOS PARA OPTIMIZACIONES\n'
            sleep 180
            screen -S world -p titan -X stuff $'anno SERVIDOR CERRADO DENTRO DE 2 MINUTOS POR UNA DURACION DE 30 SEGUNDOS PARA OPTIMIZACIONES\n'
            screen -S world -p titan -X stuff $'ser shut 120\n'
            sleep 120
            /etc/init.d/Apache restart
            sleep 5
            mysqldump -uroot -px chart > $Destiny/c$PID4.sql
            mysqldump -uroot -px auth > $Destiny/a$PID4.sql
    /etc/init.d/mysql restart
            sleep 5
            killall -9 worldserver
    killall -9 authserver
    echo 3 > /proc/sys/vm/drop_caches
fi
    return 1
}
while :
do
checker
sleep 5
done

Comme je le disais, pas le meilleur mais fait le travail.

1
Luis Alvarado