Bash: if někdy nefunguje

Tomas Holy

Bash: if někdy nefunguje
« kdy: 23. 05. 2014, 21:16:52 »
ahoj, mam tu script v bashi, ktery by mel podle aktualniho data tvorit nazvy souboru ve formatu N-Day-hh.mp4
kde N je poradove cislo dne - kvuli razeni souboru, Day je Mon Tu Wed ... a hh je hodina -1

tzn ted (je 21:12) nahravam hodinu 21 tzn zpracovavat se rto bude cca ve 22:07 => pojmenuji N-1

problem je, ze rano v 7:07 mi to spraven vytvori soubor kde se hodina ve jmenu souboru spravne nastavi na 06
ale v 8:07 mi to vytvori  008
v 9:07 vytvori 009
a v 10 uz to slape dobre vytvori to 09

jsem z toho fakt jelen :( evidentne mam chybu v tom
Kód: [Vybrat]
if [ "$HOD" -le "9" ]; then
  HOD='0'$HOD
fi

ale proste ji nevidim ! :(


-rw-rw-r-- 1 tholy tholy 154851014 May 19 08:06 1-Mon-008.mp4
-rw-rw-r-- 1 tholy tholy 154851014 May 19 09:06 1-Mon-009.mp4
-rw-rw-r-- 1 tholy tholy 144979152 May 19 01:07 1-Mon-00.mp4
-rw-rw-r-- 1 tholy tholy 145088014 May 19 02:07 1-Mon-01.mp4
-rw-rw-r-- 1 tholy tholy 145348304 May 19 03:07 1-Mon-02.mp4
-rw-rw-r-- 1 tholy tholy 145400950 May 19 04:07 1-Mon-03.mp4
-rw-rw-r-- 1 tholy tholy 145230662 May 19 05:07 1-Mon-04.mp4
-rw-rw-r-- 1 tholy tholy 147599466 May 19 06:07 1-Mon-05.mp4
-rw-rw-r-- 1 tholy tholy 154851014 May 19 07:07 1-Mon-06.mp4
-rw-rw-r-- 1 tholy tholy 121919804 May 19 10:06 1-Mon-09.mp4
-rw-rw-r-- 1 tholy tholy 121919804 May 19 11:05 1-Mon-10.mp4


Kód: [Vybrat]
#!/bin/bash

HOD=`date +%H`

echo '---------------------------------------------' >> /home/tholy/kamera.log
echo '' >> /home/tholy/kamera.log
echo `date` >> /home/tholy/kamera.log
echo 'HOD: ' $HOD >> /home/tholy/kamera.log

if [ "$HOD" -eq "00" ]; then
  HOD=23
else
  HOD=$((HOD - 1))
fi

if [ "$HOD" -le "9" ]; then
  HOD='0'$HOD
fi

#VIDEONAME=`date +%Y-%m-%d-`$HOD.mp4

VIDEONAME=`date +%u-%a-`$HOD.mp4


diky za kazdou radu
« Poslední změna: 26. 05. 2014, 17:59:17 od Petr Krčmář »


David

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #1 kdy: 23. 05. 2014, 21:49:32 »
Mozna je to blbost, ale:
  • $HOD vzdy ma hodnotu (v  porovnani nemuze byt prazdna), takze je zbytecne tu promennou obalovat uvozovkama
  • -le IMHO porovnava numerickou hodnotu, obalenim do uvozovek z toho nutne udelas string
Proste bych asi pouzil
Kód: [Vybrat]
if [ $HOD -le 9 ]; thenovsem otazka je, co to udela  ::)

T.

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #2 kdy: 23. 05. 2014, 22:23:35 »
Problém způsobí to, že čísla začínající 0 se interpretují v osmičkové soustavě, tedy 08 a 09 jsou neplatné hodnoty.


jenda

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #4 kdy: 26. 05. 2014, 10:34:31 »
or ... as other suggested - use python ;)
pohodlnejsi experimentovani : iPython
..a asi pujde i ve windows:


Kód: [Vybrat]
from datetime import *
d = datetime.today() # ? datetime.strptime('7/16/10', "%m/%d/%y")
day=d.day
if day == 1:
    print "day 1"
else:
    print "day is %d" % day

...ale je fakt , ze indentace kodu je teda pruda


libcha

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #5 kdy: 26. 05. 2014, 11:10:13 »
uživatel T. na to kápnul.
Jedním z řešení je tedy zbavit se té nuly už při volání date, takže místo +%H dát +%k. (a pak -eq "00" samozřejmě nahradit -eq "0").
A mělo by to fungovat.

Neuron

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #6 kdy: 26. 05. 2014, 11:41:18 »
Kód: [Vybrat]
$ echo $(( 0123 + 1 ))
84

$ echo $(( 10#0123 + 1 ))
124

Petr

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #7 kdy: 26. 05. 2014, 12:41:45 »
Nebo použij např.:

Kód: [Vybrat]
date -d '1 hour ago' +%H

haha

Re:bash script, problrm s porovnaim v if - asi jsem slepy, spie blby :(
« Odpověď #8 kdy: 26. 05. 2014, 13:15:35 »
Citace
ale je fakt , ze indentace kodu je teda pruda

Nucená indentace kódu je naopak dokonalý bič na hovada. Aspoň si lidi nehrajou na živý obfuskátor, protože jinak je to hned vylíská. A to se mi líbí. Věci jako logika kódu už se bohužel takhle ovlivnit nedají, ale aspoň se v tom pak dá trochu orientovat.

jenda

Re:Bash: if někdy nefunguje
« Odpověď #9 kdy: 27. 05. 2014, 06:08:56 »
sice off topic - ale zivej obfuskator me pobavil :)
uz par let sleduju gugli projekt,moooc hezky, zkuste http://play.golang.org
usporadani kodu ? automaticky : go fmt <co a kde>
:)