Portál AbcLinuxu, 1. května 2025 05:06
Toto bude skor fungovat, ako to povodne.
#! /bin/bash declare IP declare -i TIME INDEX IP='192.168.1.1' TIME=1 INDEX=0 # true mi prijde logickejsie nez zapis [ 1 ], ale oba funguju. while true; do # IP je ip adresa a je vhodnejsi tento zapis pomocou premennej. Ak zmenis na jednom mieste, # zmeny sa prejavia vsade a netreba to prehladavat. ping "$IP" -c 1 # if ping "$IP" -c 1; then - je tiez sposob, ako zapisat test a zaroven skontrolovat vysledok. # vsetko je to ale otazkou preferencii jednotlivca. if [ $? -ne 0 ]; then # vzdy navysi hodnotu o 1 rovnako ako INDEX-- zmensi hodnotu $INDEX o 1 let INDEX++ # alebo pouzit zapis, kde vykonaju rovnaku ulohu spravne #let INDEX=INDEX+1 #INDEX=$((INDEX+1)) # atd. echo "Ping was not completed successfuly. Left $INDEX tries." if [ $INDEX -eq 10 ]; then echo "System is going to shut down now." # v zavislosti na nasteveni daneho systemu, je mozne, ze bude nutne # zadat heslo # odkomentuj nasledovne pre realne vyuzitie podla tvojich predstav. #shutdown -h now fi else echo "Ping was completed successfuly." # nacitame do premennej INDEX hodnotu 0, zapis let INDEX=1 funguje, ale to # by nikto asi takto nezapisal, lebo pouzitie let je uplne zbytocne. INDEX=0 fi sleep $TIME; done
Ale predsalen by som rad pocul, ake vyuzitie ste nasli, bo nie je tam nic popisane, okrem hw vybavenia.
Ale chvalim urcite, ze ste sa podelili o vase riesenie, aj ked na tom este treba zapracovat. :)
no dakujem ale vsak je to to iste ako to moje. vyuzitie je jasne ako som napisal aby som vypol "normalne" pocitac ak vypnu prud
Ja nevravim, ze nie, zrejme to Vase zbehne rovnako uspesne. ;) Len veci ako let i=0 a podobne su zvlastne.
A je divne, ze mi zrazu aj moj prispevok ukazuje ...
takze zase som ale o nieco mudrejsi
v podmienk if ak je "-ne" nerovna sa
a ak je v if "-eq" tak je rovna sa
dakujem
-ne je not equal a teda nerovna sa
-eq je equal a teda rovna sa
a potom su tu -gt, -lt, -ge, -le
Zapis :
if [ $var1 == $var2 ] # porovnavame retazec ("text")
if [[ $var1 -eq $var2 ]] # porovnavame cisla, matematicka operacia, v bash-i funguje, ale v sh mam taky dojem, ze nie.
if (( $var1 == $var2 )) # ako v predchadzajucom pripade, najma ak je iste, ze var1 ako aj var2 su vzdy ciselne hodnoty
P.S. : Ten moj druhy pokus je spravny, je tam opravena chyba s poctom ostavajucich pokusov. A kedze tento skript by mal bezat podla vsetkeho na pozadi, tak echo by bolo vhodne nahradit mozno logger -om , aby sme aj vedeli, preco sa system vypol.
P.S.2: Musis nahradit [ ] za [[ ]] , kde je pouzite -eq -ne a podobne, alebo pouzit prenosny sposob a to (( var1 == var2 )) . Moja chyba. Dalsia na par riadkov. :D
Z nejakeho zahadneho dovodu mi neodoslalo prispevok. :)
#! /bin/bash declare IP # vzdy budu mat TIME, INDEX a MAX_INDEX v tomto pripade ciselnu hodnotu. Napr. TIME='test'; echo $TIME da vysledok 0 declare -i TIME INDEX MAX_INDEX # globalne premenne, platne pocas celeho behu skriptu a hlavne jednoduche na udrzbu # aj ked toto je iba par riadkov. IP='192.168.1.1' TIME=1 INDEX=0 MAX_INDEX=10 # true mi prijde logickejsie nez zapis [ 1 ], ale oba funguju. while true; do # IP je ip adresa a je vhodnejsi tento zapis pomocou premennej. Ak zmenis na jednom mieste, # zmeny sa prejavia vsade a netreba to prehladavat. ping "$IP" -c 1 # if ping "$IP" -c 1; then - je tiez sposob, ako zapisat test a zaroven skontrolovat vysledok. # vsetko je to ale otazkou preferencii jednotlivca. if [ $? -ne 0 ]; then # vzdy navysi hodnotu o 1 rovnako ako INDEX-- zmensi hodnotu $INDEX o 1 let INDEX++ # alebo pouzit zapis, kde vykonaju rovnaku ulohu spravne #let INDEX=INDEX+1 #INDEX=$((INDEX+1)) # atd. echo "Ping was not completed successfuly. Left $((MAX_INDEX - INDEX)) tries." if [ $INDEX -eq $MAX_INDEX ]; then echo "System is going to shut down now." # v zavislosti na nasteveni daneho systemu, je mozne, ze bude nutne # zadat heslo # odkomentuj nasledovne pre realne vyuzitie podla tvojich predstav. #shutdown -h now fi else echo "Ping was completed successfuly." # nacitame do premennej INDEX hodnotu 0, zapis let INDEX=1 funguje, ale to # by nikto asi takto nezapisal, lebo pouzitie let je uplne zbytocne. INDEX=0 fi sleep $TIME; done
Ale predsalen by som rad pocul, ake vyuzitie ste nasli, bo nie je tam nic popisane, okrem hw vybavenia. O co presne sa snazite.
Ale chvalim urcite, ze ste sa podelili o Vase riesenie, aj ked na tom este treba zapracovat, si myslim. :)
aj tak to nebudem moct nasadit na fileserver.. sa mi stala taka vec ze mi odisiel USB kluc na ktorom som mal nainstalovany OpenMedia Vault takze mam fileserver docasne nefunkcny :(
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.