Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Tomas Holy 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
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
#!/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
-
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
if [ $HOD -le 9 ]; then
ovsem otazka je, co to udela ::)
-
Problém způsobí to, že čísla začínající 0 se interpretují v osmičkové soustavě, tedy 08 a 09 jsou neplatné hodnoty.
-
https://www.abclinuxu.cz/blog/DutaVrba/2014/5/zas-dva-dny-v-mesici-kdy-zlobi-bash-skripty
-
or ... as other suggested - use python ;)
pohodlnejsi experimentovani : iPython
..a asi pujde i ve windows:
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
-
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.
-
$ echo $(( 0123 + 1 ))
84
$ echo $(( 10#0123 + 1 ))
124
-
Nebo použij např.:
date -d '1 hour ago' +%H
-
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.
-
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>
:)