Portál AbcLinuxu, 30. dubna 2025 11:25

Prvni vicestrankovy BASH skript

3.6.2005 13:04 | Přečteno: 1387× | Linux | poslední úprava: 3.6.2005 15:50

Zajimalo by mne jestli se nekdy (samovolne? nebo snad setrvacnosti?) stanu hardcorovym linuxarem, protoze nektete veci mi proste nejak nevoni, bud jsem na to moc liny, blby anebo uz prilis stary | mlady :)

Asi nikdy nezacnu pouzivat vim, Origin mam radsi nez gnuplot, pine/mutt snesu jen kdyz neni nic jineho, Gimp spoustim jen abych vyzkousel, zda se nainstaloval a jsem si jisty, ze sve svatebni oznameni nebudu sazet v LaTeXu a editovat vim-em, jako to delal muj kamarad. Diplomku ci disertaci jsem tak psal, to jo, o tom zadna. Stejne jako nedam dopustit trebas na skvely mplayer, LyX a jine

A vcera jsem po letech pouzivani Linuxu a trvale neschopnosti prekonat svou lenost a naucit se poradne BASH konecne pochopil, jak se maji psat skripty. Napsal jsem svuj prvni vicestrankovy skript a ted cekam jak mi ho zkritizujete a vylepsite :)

Jirka

P.S. Nejsem programator a (snad) jim nikdy nebudu

P.P.S Nejhezci UNIX je stejne MAC OS X od Apple na mem iBooku

A ted slibeny skript

#!/bin/bash 
# Copyright (c) 2005 Jirka Cech.  
# 
# Author: Jirka Cech 
#
# Attaches the scalebar picture unique for
# each magnification to the set of pictures 
# as given by its  filenames. 
#

# sets the scalebar location
PATH2SCALEBARS=~/TEMdata/bars/ 
test -x ${PATH2SCALEBARS} || echo wrong path to scalebars

# set scalebar suffix
B_SFX=".pgm"
# set output files suffix
O_SFX=".png"

# set the real scalebar pictures
B_220x="${PATH2SCALEBARS}220${B_SFX}" 
B_290x="${PATH2SCALEBARS}290${B_SFX}" 
B_380x="${PATH2SCALEBARS}380${B_SFX}"
B_500x="${PATH2SCALEBARS}500${B_SFX}"
B_660x="${PATH2SCALEBARS}660${B_SFX}"
B_870x="${PATH2SCALEBARS}870${B_SFX}"
B_1150x="${PATH2SCALEBARS}1150${B_SFX}"
B_1500x="${PATH2SCALEBARS}1500${B_SFX}"
B_2000x="${PATH2SCALEBARS}2000${B_SFX}"
B_2750x="${PATH2SCALEBARS}2750${B_SFX}"
B_3800x="${PATH2SCALEBARS}3800${B_SFX}"
B_5000x="${PATH2SCALEBARS}5000${B_SFX}"
B_6600x="${PATH2SCALEBARS}6600${B_SFX}"
B_15000x="${PATH2SCALEBARS}15000${B_SFX}"
B_20000x="${PATH2SCALEBARS}20000${B_SFX}"
B_27500x="${PATH2SCALEBARS}27500${B_SFX}"
B_38000x="${PATH2SCALEBARS}38000${B_SFX}"
B_50000x="${PATH2SCALEBARS}50000${B_SFX}"
B_66000x="${PATH2SCALEBARS}66000${B_SFX}"
B_88000x="${PATH2SCALEBARS}88000${B_SFX}"
B_115000x="${PATH2SCALEBARS}115000${B_SFX}"
B_150000x="${PATH2SCALEBARS}150000${B_SFX}"
B_200000x="${PATH2SCALEBARS}200000${B_SFX}"
B_250000x="${PATH2SCALEBARS}250000${B_SFX}"

echo "Path to scalebars is: $PATH2SCALEBARS";


# read all files where the magnification is the last 
# part of filename delimited by "-"
for i in *.pgm ; do
#   echo "file is: $i"  
    MAGNIF=`echo ${i%.pgm} | cut -d"-" -f2`; 
#   echo "Magnification is: $MAGNIF";  
    
case $MAGNIF in 
    "220x")
#   echo "Attaching scalebar (mag 220x) $B_220x to the picture $i";
    echo 220;
    montage -tile 1x2 -geometry +0+0  $i $B_220x ${i}_s${O_SFX}
    ;;
    "290x")
    echo 290;
    montage -tile 1x2 -geometry +0+0  $i $B_290x ${i}_s${O_SFX}
    ;; 
    "380x")
    echo 380;
    montage -tile 1x2 -geometry +0+0  $i $B_380x ${i}_s${O_SFX}
    ;;
    "500x")
    echo 500;
    montage -tile 1x2 -geometry +0+0  $i $B_500x ${i}_s${O_SFX}
    ;; 
    "660x")
    echo 660;
    montage -tile 1x2 -geometry +0+0  $i $B_660x ${i}_s${O_SFX}
    ;; 
    "870x")
    echo 870;
    montage -tile 1x2 -geometry +0+0  $i $B_870x ${i}_s${O_SFX}
    ;; 
    "1150x")
    echo 1150;
    montage -tile 1x2 -geometry +0+0  $i $B_1150x ${i}_s${O_SFX}
    ;; 
    "1500x")
    echo 1500;
    montage -tile 1x2 -geometry +0+0  $i $B_1500x ${i}_s${O_SFX}
    ;; 
    "2000x")
    echo 2000;
    montage -tile 1x2 -geometry +0+0  $i $B_2000x ${i}_s${O_SFX}
    ;; 
    "2750x")
    echo 2750;
    montage -tile 1x2 -geometry +0+0  $i $B_2750x ${i}_s${O_SFX}
    ;; 
    "3800x")
    echo 3800;
    montage -tile 1x2 -geometry +0+0  $i $B_3800x ${i}_s${O_SFX}
    ;;
    "5000x") 
    echo 5k;
    montage -tile 1x2 -geometry +0+0  $i $B_5000x ${i}_s${O_SFX}
    ;; 
    "6600x")
    echo 7k;
    montage -tile 1x2 -geometry +0+0  $i $B_6600x ${i}_s${O_SFX}
    ;; 
    "15000x")
    echo 15k;
    montage -tile 1x2 -geometry +0+0  $i $B_15000x ${i}_s${O_SFX}
    ;;
    "20000x") 
    echo 20k;
    montage -tile 1x2 -geometry +0+0  $i $B_20000x ${i}_s${O_SFX}
    ;; 
    "27500x")
    echo 27k;
    montage -tile 1x2 -geometry +0+0  $i $B_27500x ${i}_s${O_SFX}
    ;; 
    "38000x")
    echo 38k;
    montage -tile 1x2 -geometry +0+0  $i $B_38000x ${i}_s${O_SFX}
    ;; 
    "50000x")
    echo 50k;
    montage -tile 1x2 -geometry +0+0  $i $B_50000x ${i}_s${O_SFX}
    ;; 
    "66000x")
    echo 66k;
    montage -tile 1x2 -geometry +0+0  $i $B_66000x ${i}_s${O_SFX}
    ;;
    "88000x") 
    echo 88k;
    montage -tile 1x2 -geometry +0+0  $i $B_88000x ${i}_s${O_SFX}
    ;; 
    "115000x") 
    echo 115k;
    montage -tile 1x2 -geometry +0+0  $i $B_115000x ${i}_s${O_SFX}
    ;; 
    "150000x") 
    echo 150k;
    montage -tile 1x2 -geometry +0+0  $i $B_150000x ${i}_s${O_SFX}
    ;;
    "200000x") 
    echo 200k;
    montage -tile 1x2 -geometry +0+0  $i $B_200000x ${i}_s${O_SFX}
    ;; 
    "250000x") 
    echo 250k;
    montage -tile 1x2 -geometry +0+0  $i $B_250000x ${i}_s${O_SFX}
    ;; 
    *)
    echo "${i}:  unknown magnification"
    ;;
esac
done
       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

3.6.2005 13:11 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Překlep?
Odpovědět | Sbalit | Link | Blokovat | Admin
# Copyright (c) 2005 Jirka Cech.
  ^^^^^^^^^^^^^
překlep? :-D
3.6.2005 13:43 Triton
Rozbalit Rozbalit vše Ehm ...
Odpovědět | Sbalit | Link | Blokovat | Admin
... to opakované zadávání cesty pro uložení zvětšeného obrázku přímo volá po jiném(jednoduchém) algoritmu. Co kdybyste chtěl ukládat do samostatných podadresářů např. 10.000 různých zvětšení ? To byste se upsal.

Držím palce, určitě na to brzy přijdete :-D

JiK avatar 3.6.2005 14:07 JiK | skóre: 13 | blog: Jirkoviny | Virginia
Rozbalit Rozbalit vše Re: Ehm ...
ehmm,...
  • zadny obrazek se nezvetsuje
  • ke kazdemu se 'jen' prilepi patricky scalebar (meritko?) podle informace o zvetseni, ukryte v posledni casti jmena souboru pred priponou
  • vysledky se ulozi tam, odkud jsou soubory, se stejnym jmenem, ale ve formatu .png (misto vstupniho .pgm - portable greymap) coz je lepsi pro normalni lidi
Jirka
3.6.2005 14:40 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Ehm ...
To sper ďas... Co se snažil Triton naznačit, je, že skript je dlouhý hlavně proto, že se skládá převážně z opakujícího se -- a tudíž zcela zbytečného -- kódu a že by bylo vhodnější napsat ho genericky.
3.6.2005 15:14 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Ehm ...
#!/bin/bash 
# Copyleft 2005 Hynek Pichi Vychodil.  
# 
# Author: Pichi
#
# Attaches the scalebar picture unique for
# each magnification to the set of pictures 
# as given by its  filenames. 
#

# sets the scalebar location
PATH2SCALEBARS=~/TEMdata/bars/ 
test -x ${PATH2SCALEBARS} || echo wrong path to scalebars >&2

# set scalebar suffix
B_SFX=".pgm"
# set output files suffix
O_SFX=".png"

echo "Path to scalebars is: $PATH2SCALEBARS" >&2

# read all files where the magnification is the last 
# part of filename delimited by "-"
for file in *.pgm ; do
#   echo "file is: $file" >&2
    name="${file%.pgm}"
    MAGNIF="${name##*-}"
    MAGNIFN="${MAGNIF%x}"
#   echo "Magnification is: $MAGNIF";  
    
case "$MAGNIFN" in
    220|290|380|500|660|870|1150|2000|2750|3800|5000|6600|15000|20000|27500|38000|50000|66000|88000|115000|150000|200000|250000)
      echo "$MAGNIFN"
      montage -tile 1x2 -geometry +0+0 "$file" "$PATH2SCALEBARS$MAGNIFN$B_SFX" "${name}_s$O_SFX"
    ;; 
    *)
      echo "${file}:  unknown magnification"
    ;;
esac
done
a nebo ještě lépe místo case
sb_file="$PATH2SCALEBARS$MAGNIFN$B_SFX"
if [ -r "$sb_file" ]
then
   montage -tile 1x2 -geometry +0+0 "$file" "$sb_file" "${name}_s$O_SFX" ||
      echo "Kolecko se polamalo" >&2
else
   echo "${file}:  unknown magnification"
fi
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
3.6.2005 14:52 Triton
Rozbalit Rozbalit vše Re: Ehm ...
No moje chyba, měl jsem si přečíst něco o příkazu montage z ImageMagicku a do odpovědi jsem zbytečně uvedl zavádějící informaci.

To hlavní ale zůstává. Pokud opakovaně zadáváte příkaz u kterého se mění parametr podle určitého pravidla(4. parametr, scalebar image), tak je to jenom nedostatek důvtipu zapsat to jedním příkazem. V některých případech, např. při vysokém počtu iterací, to ani jinak řešit nejde.

3.6.2005 14:59 iSteve
Rozbalit Rozbalit vše Prilis komplexni?
Odpovědět | Sbalit | Link | Blokovat | Admin
Ten skript nejak nechapu ... proc neudelat trivialne: montage -tile 1x2 -geometry +0+0 $i $B_$MAGNIF ${i}_s${O_SFX}

... nebo to snad dela jeste neco jineho?
3.6.2005 15:32 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Zkus se inspirovat :-)
Odpovědět | Sbalit | Link | Blokovat | Admin
Třeba tady :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.