ping príkaz v if/else - ako funguje

Problémy s příkazy v příkazovém řádku nebo obecně s terminálem
Zamčeno
Zpráva
Autor
hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

ping príkaz v if/else - ako funguje

#1 Příspěvek od hal_sk »

Nazdar,
Mám jednoduchý skript, ktorý pinguje IP adresu a podľa výsledku vypíše odhadovaný stav môjho pripojenia na internet.
Chcel by som ten skript vylepšiť tak, že v prípade offline stavu sa vy-echovaná informácia doplní aj o výstup z už vykonaného pingovania IP adresy (aby som videl výstup pingovania).
Na základe čoho sa ten výraz (vedľa if) vyhodnotí ako true, alebo false? Prečo nefunguje ak si ten výraz najprv uložím do premennej (stav), aby som ho následne mohol použiť nie len v podmienke, ale aj na iných miestach (pod else).
No snáď som sa vyjadril jasne :D Keď tak tento post skúsim pre-formulovať.

Kód: Vybrat vše

#!/bin/bash
ip="8.8.8.8"
#stav=$(ping -c 1 $ip)
if ping -c 1 $ip #if stav
  then
  echo "som online"
  else
  echo "som offline, detaily: ${stav}"
fi

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: ping príkaz v if/else - ako funguje

#2 Příspěvek od alfisko »

V pripade offline stavu je vystup nieco taketo : ping: connect: Sieť nie je dostupná
Ak chces pravidelne konrolovat ci si v sieti, daj do cronu tento skript.

Kód: Vybrat vše

#!/bin/bash
ip="8.8.8.8";

export DISPLAY=:0 ;
if ! ping -c 1 $ip; then
notify-send  "som offline"
fi

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: ping príkaz v if/else - ako funguje

#3 Příspěvek od hal_sk »

Nie. Asi som sa zle vyjadril. Aj keď podobné ako v tvojom príspevku sme asi raz spolu riešili.
Tentoraz by som potreboval uložiť do premennej hlásenie z príkazu:

Kód: Vybrat vše

ping -c 1 $ip
...z dôvodu, aby som to hlásenie následne mohol pripojiť do logov. Napr: "som OFFLINE, výstup z pingu je: (ping: www.blablableble.sk: Name or service not known).
Chcem sa vyhnúť dvojnásobnému volaniu príkazu "ping" v mojom skripte - raz v kondicionály pri "if" a druhý raz pri tvorbe logu pod "then".
Niečo ako toto - ale nefunguje to ako očakávam:

Kód: Vybrat vše

#!/bin/bash
ip="8.8.8.8"
stav=$(ping -c 1 $ip)
if <stav je ok>
  then
  echo "som online"
  else
  echo "som offline, detaily: "<pripoj výstup z pingu, ktorý volám vyššie>
fi

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: ping príkaz v if/else - ako funguje

#4 Příspěvek od alfisko »

No ale porovnavas vystup z pingu. Pri offline je jeden a pri online druhy. Ak chces zobrazit vypis z pingu, pozri si regularne vyrazy spajanie retazca a premennej. Je toho plny gugel.

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: ping príkaz v if/else - ako funguje

#5 Příspěvek od hal_sk »

Viem ako sa spájajú reťazce a premenné. Neviem ale prečo príkaz

Kód: Vybrat vše

ping -c 1 8.8.8.8
sa raz tvári ako "boolean" (ak ho dám vedľa "if") a raz ako "reťazec" s detailami (ak ho dám vedľa "echo"). Obe tieto hodnoty ma však zaujímajú, ale príde mi čisté ten príkaz zavolať len raz na začiatku skriptu a len si uložiť oba typy výstupov tohto príkazu (boolean aj text) do premenných. Jednu by som použil do podmienky if a druhú do logovania.

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: ping príkaz v if/else - ako funguje

#6 Příspěvek od alfisko »

Moc tomu nerozumiem co chces. Zistujes ci je pristupny server 8.8.8.8 ? Vystup z ping ma dve moznosti. Tie vyhodnoti podmienka. Ak to chces do logu tak potom ping -c 1 $ip >> log pred podmienkou.

Zamčeno