Pomoc s shell script kodom

ice

Pomoc s shell script kodom
« kdy: 05. 06. 2015, 09:55:28 »
Dobry den

Potreboval by som pomoct so shell scriptom. Ide oto ze potrebujem spravit aby dani kod zaslal pushbullet notifikaciu len pri zmene hodnoty v danom subore gpio (
Kód: [Vybrat]
sys/class/gpio/gpio2/value/, cize ak bude v danom subore 1 tak script vypise notifikaciu len raz a nebude ju vypisovat stale pokial sa vsak zmeni na 0 vyhodi to notifikaciu zase. Cize ide oto aby to vypisovalo len notifikaciu pri danej zmene z 0 na 1 alebo z 1 na 0 .

Vedel by mi niekto poradit ?
Dakujem

Kód: [Vybrat]
#!/bin/sh
while [ "1" = "1" ]
do
a=1 # Fixed value
b=0 # Fixed value - 1
page=$(cat /sys/class/gpio/gpio2/value)
echo "Temperature: $page"
if [ $page -ge $a ]
then
curl -u $API: https://api.pushbullet.com/v2/pushes -d type=note -d title="Zavlaha povolena je "$page"°C" -d body="$MSG"
echo "1"
elif [ $page -le $b ]
then
fi
sleep 30
done


Peter

Re:Pomoc s shell script kodom
« Odpověď #1 kdy: 05. 06. 2015, 10:17:25 »
Ak Ti správne rozumiem, tak chceš porovnávať ovsah premennej page s jej predchádzajúcou hodnotou. Zadefinuj si teda ďalšiu premennú, napr pageold a porovnaj to. V prípade zmeny môžeš teda vvypísať hodnotu, v opačnom pripade nemusíš vykonať nič.

inotify

Re:Pomoc s shell script kodom
« Odpověď #2 kdy: 05. 06. 2015, 10:50:46 »
Pokud chapu spravne zadani, tak neco takoveho by mohlo fungovat:

Kód: [Vybrat]
old=`cat ./testfile`;
while inotifywait -e MODIFY ./testfile 2>/dev/null >/dev/null ; do
  now=`cat ./testfile`;
  if [ "$now" != "$old" ]; then
    echo "File content changed";
  fi;
  old=$now;
done

Predpokladam, ze na systemu je dostupny inotifywait (ve Fedore balicek inotify-tools) a ze sledovany soubor (testfile) existuje jeste pred spustenim "scriptu"

inotify

Re:Pomoc s shell script kodom
« Odpověď #3 kdy: 05. 06. 2015, 10:58:49 »
Tak bohuzel tohle fungovat nebude :(
z man 7 inotify: Furthermore, various pseudo-filesystems such as /proc, /sys, and /dev/pts are not monitorable with inotify.

V tom pripade me napade jen nahradit inotifywait za :; a vlozit do smycky nejaky rozumny sleep(1).

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Pomoc s shell script kodom
« Odpověď #4 kdy: 05. 06. 2015, 11:30:32 »
Tohle by slo?

Kód: [Vybrat]
#!/bin/sh
OLD_VALUE=$(cat /cesta/ke/sledovanymu/souboru)
NEW_VALUE=$OLD_VALUE
while true; do
    sleep 1
    NEW_VALUE=$(cat /cesta/ke/sledovanymu/souboru)
    if [ $OLD_VALUE != $NEW_VALUE ]; then
        echo Sem patri tvoje akce
        OLD_VALUE=$NEW_VALUE
    fi
done


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Pomoc s shell script kodom
« Odpověď #5 kdy: 05. 06. 2015, 11:36:52 »
Kód: [Vybrat]
#!/bin/sh
OLD_VALUE=$(cat value)
NEW_VALUE=$OLD_VALUE
while true; do
    sleep 1
    NEW_VALUE=$(cat value)
    if [ $OLD_VALUE != $NEW_VALUE ]; then
        OLD_VALUE=$NEW_VALUE
        case $NEW_VALUE in
            0)
                echo Hodnota se zmenila na 0
            ;;
            1)
                echo Hodnota se zmenila na 1
            ;;
            *)
                echo Neplatny stav
            ;;
        esac
    fi
done
Nebo jeste takhle, at to je hezci :)

ice

Re:Pomoc s shell script kodom
« Odpověď #6 kdy: 05. 06. 2015, 12:30:14 »
Tuxik: funguje to velmi pekne dakujem :)