[linux] BASH programovanie - ako zisti, ci je premenna "prazdna" // spravny zapis $premennej // prve slovo prveho riadku nezacinajuceho # zo $suboru // Ako script zisti svoju cestu?
Peter Trsko - dogmaT
dogmat na inmail.sk
Neděle Duben 17 02:14:58 CEST 2005
Dobry den,
> Ahoj.
>
> 1.
>
> Potrebujem prve slovo prveho riadku nezacinajuceho # zo $suboru.
>
> Zatial to robim takto (ale da mi to cely riadok ... nad suborom sa
> nepozastavujte :)
> if [ -e /etc/hostname ];then pc=`grep -v "#" /etc/hostname | head
> -1`;else pc="etc-hostname-neexistuje";fi
> if [ -z $pc ];then pc="hostname-was-empty";echo $pc;fi
ked uz tak uz :-)
if [ -e /etc/hostname ]; then
# '^#' ak ma byt '#' teda na zaciatku riadku
# su v tom subore aj prazdne riadky? ak hej tak by sa skor oplatilo
# pouzit '(^#|^[ ]*)' a do hranatej zatvorky doplnit vsetky biele
# znaky
pc=`grep -v -E '^#' /etc/hostname | head -n1`
# predpoklad: oddelovacom je medzera
# ak sa pred prvym slovom nachadza medzer(a|y) - prec s nou!
pc="${pc#* }"
# odstrani vsetko, co nasleduje za prvym slovom
# (tie hranate zatvorky su tam nutne)
pc="${pc%%[ ]*}"
else
pc="etc-hostname-neexistuje"
fi
este sa da ziskanie prveho slova aj pomocou:
# (pc obsahuje prvy relevantny riadok)
# za biele znaky sa povazuju vsetky
for word in $pc; do
pc=$word
break
done
odporucam este pozriet manual k awk-u, tu staci:
# u awk-u pozor na ' a "
pc=`grep -v -E '^#' /etc/hostname | head -n1 | awk '{ print $1 }'`
> 2. zmazane
>
> 3. potrebujem
> if $daco = EMPTY (je prazdna) then $daco=$dacoine
> Odpovedam si sam :-D:
> if [ -z $daco ];then echo "empty";else echo "full";fi
je tu este aj:
# ak je daco nenastavene, alebo prazdne
# vrati retazec "dacoine", ale nenastavy daco=dacoine
${daco:-dacoine}
a
# ak je daco nenastavene, alebo prazdne
# vrati "dacoine" a aj nastavi daco=dacoine
${daco:=dacoine}
>
> 4.
> Ktory zapis (bash) je spravny?
> name="$pc""_""$type""_""$dateback"
> name2="$pc"_"$type"_"${dateback}"
> name3="${pc}_${type}_${dateback}"
> name4=${pc}_${type}_${dateback}
>
> Funguju sice vsetky, ale na co je najlepsie si navyknut (vzhladom na
> python, perl, php, zsh, tcsh)?
odporucam name3
>
> 5.
> Ako script zisti svoju cestu?
> Beziaci script /home/user/script/tento-script ...
> chcem dostat:
> $cesta=/home/user/script/
nazov skriptu je v $0 a aj s cestou
upozornenie: relativnou ak je volany napr ./script.sh alebo
../scripty/scritp.sh, ale ak je v adresari ktory je v $PATH a je volany
bez specifikacie cesty k nemu tak obsahuje absolutnu cestu
>
> 5B.
> Ak by som aj vedel (neviem) zistit /home/user/script/tento-script
> ako ho "orezem" na:
> /home/user/script/tento-script
na ziskanie cisto cesty je tu viac moznosti:
1. program "dirname"
cesta=`dirname $0`
2. ${0%/*}
cesta="${0%/*}
obe moznosti robia to iste a to odstrania nazov scriptu z konca cesty
ak by si nahodou potreboval dostat potom nazov scriptu bez cesty tak:
1. program "basename"
script=`basename $0`
2. ${0##*/}
script="${0##*/}
>
>
>
> Dik
> Peter
>
> _______________________________________________
> http://lists.linux.sk/listinfo/linux
> Prehladavanie archivu: http://search.lists.linux.sk
> Meta FAQ: http://faq.lists.linux.sk
IMHO kukni "man bash"
Peter Trsko
--
(dogmaT
(icq 303140614)
(jabber `(dogmat na njs.netlab.cz
dogmat na jabber.sk))
(web http://dogmat.tomi.us))
Další informace o konferenci linux