Mały stoper w bashu

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

szymek
Użytkownik
Posty: 76
Rejestracja: 2005-12-10, 18:42

Mały stoper w bashu

Post autor: szymek »

Cześć

Napisałem w bashu mały program do odliczania określonej ilości czasu, po którym można np. wyświetlić animację gif lub odegrać dźwięk (taki alarm).
Program wygląda tak:

Kod: Zaznacz cały

#!/bin/bash
gdialog --title "Ustawienie alarmu" \
--inputbox "Wprowadź ilość minut" 8 40 2>/tmp/min.txt
sel=$?
case $sel in
0)
c=`cat /tmp/min.txt`
rm /tmp/min.txt
i=0
u=$((c*60))
while [ $i -lt $u ]; do
sleep 1
i=$((i+1))
a=$(($i/60))
b=$(($i/3600))
s=$(($i % 60))
m=$(($a % 60))
h=$(($b % 24))
clear
echo `printf %02d $h`:`printf %02d $m`:`printf %02d $s`
# > /tmp/c.txt
# r=`cat /tmp/c.txt`
# Xdialog --title "czas" --no-buttons \
# --infobox $r 4 10
done
/usr/bin/Eterm -b grey -f red --pause -e echo "Upłynęło już $c minut" ;;
1) exit 0 ;;
255) exit 0 ;;
esac
Mam tylko jeden kłopot, jak wyświetlać czas w oknie gtk zamiast w Eterm (np. przez Xdialog lub gdialog, ale na pewno są też inne możliwości)? Próbowałem z infobox Xdialog (zahaszowane wiersze pod echo ...), ale chciałbym, żeby okno było cały czas w jednym miejscu, a nie znikało i pojawiało się przy każdej iteracji.

Pozdrawiam

Awatar użytkownika
mina86
Moderator
Posty: 3330
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Mały stoper w bashu

Post autor: mina86 »

szymek pisze:Wprowadź ilość minut
liczbę
szymek pisze:gdialog opcje
sel=$?
case $sel in
0)
# ...
1) exit 0 ;;
255) exit 0 ;;
esac
IMO wygodniej:

Kod: Zaznacz cały

qdialog opcje || exit 0
# ...
szymek pisze:h=$(($b % 24))
To jest w zasadzie zbędne (albo nawet i szkodliwe).
szymek pisze:u=$((c*60))
while [ $i -lt $u ]; do
W zasadzie po co Ci nowa zmienna?

Kod: Zaznacz cały

c=$((c*60)) 
while [ $i -lt $c ]; do
szymek pisze:a=$(($i/60))
b=$(($i/3600))
s=$(($i % 60))
m=$(($a % 60))
h=$(($b % 24))
A nie można zaoszczędzić dwóch linijek:

Kod: Zaznacz cały

s=$(( $i % 60 ))
m=$(( $i / 60 % 60 ))
h=$(( $i / 3600 ))
szymek pisze:echo `printf %02d $h`:`printf %02d $m`:`printf %02d $s`
Bardzo nieładnie! Wręcz brzydko! Wręcz ochydnie!

Kod: Zaznacz cały

printf '%2d:%02d:%02d' $h $m $s
A w zasadzie, można wywalić jeszcze wcześniejsze linijki i dać:

Kod: Zaznacz cały

printf '%2d:%02d:%02d' $(( $i / 3600 )) $(( $i / 60 % 60 )) $(( $i % 60 ))
szymek pisze:echo `printf %02d $h`:`printf %02d $m`:`printf %02d $s`
# > /tmp/c.txt
# r=`cat /tmp/c.txt`
Znowu bardzo nieładnie.

Kod: Zaznacz cały

r=`printf '%2d:%02d:%02d' $(( $i / 3600 )) $(( $i / 60 % 60 )) $(( $i % 60 ))`
Co do samego pytania to nie wiem.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.

Awatar użytkownika
m4jkel
Użytkownik
Posty: 690
Rejestracja: 2005-10-15, 18:56
Lokalizacja: Katowice

Re: Mały stoper w bashu

Post autor: m4jkel »

mina86 pisze:liczbę
Jesteś drugą osobą, którą znam, a która zwraca na to uwagę. Szacunek ;)
[url=http://userbars.org][img]http://img89.imageshack.us/img89/9140/brainpng1ug.png[/img][/url]
To nie był kwadrat. To było koło o charakterze prostokąta.

ODPOWIEDZ