Stránka 1 z 1

ping príkaz v if/else - ako funguje

Napsal: 11 pro 2021, 14:38
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

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

Napsal: 11 pro 2021, 18:24
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

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

Napsal: 11 pro 2021, 18:54
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

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

Napsal: 11 pro 2021, 19:28
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.

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

Napsal: 11 pro 2021, 23:10
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.

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

Napsal: 12 pro 2021, 08:59
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.