TitanusEramius skrev:Jeg har altid (det lyder så flot ) brugt en form for logik, der sikkert ikke er logisk for andre.
Den præcise J/N-kode i sh erKode: Vælg alt
# Ja / nej funktion
valg_janej() {
# Gentag hvis ikke der svares ja /nej
while true
do
#$* read ever parameter giving to the yesNo function which will be the message
echo -n "$* (J/N)? "
# junk holds the extra parameters yn holds the first parameters
read jn junk
#check for difference cases
case $jn in
ja|Ja|JA|j|J)
return 0
;;
nej|Nej|NEJ|n|N)
return 1
;;
esac
done
}
Som du kan se, så har jeg valgt at oprette den som en funktion i sig selv, det giver mig nemlig mulighed for atKode: Vælg alt
# Tjek for ja / nej svar
if valg_janej 'Skal noget ekstra køres her?'
then
noget_ekstra
noget_andet
else
noget_andet
fi
noget_ekstra og noget_andet er bare to andre funktioner, som er defineret inden ja/nej-funktionen. Efter at jeg fik ja / nej til at virke, har jeg tilgengæld prøvet at gennemskue hvordan man laver flere ja / nej'er, men svaret er undsluppet mig indtil videre.
Lad os sige, at vi har 3 ting man kan vælge imellem, nemlig A, B og C. De kunne fx være backup 3 forskellige steder. Man kunne sagtens lave en underlig menuKode: Vælg alt
echo "Hvad vil du tage backup af?"
(noget choice-kode her)
1 A
2 B
3 C
4 A & B
5 A & C
...
Ikke just optimalt... Smartere ville det være hvis man i stedet fik 3 spørgsmål i træk, hvor der først bliver spurgt J/N til A, så til B og til sidst C. Man kunne godt præsentere ja / nej 3 forskellige steder i scriptet, men det er heller ikke smart, for så skal man sidde ved computeren, og holde øje med hvad den laver. Et rigtigt script tager sine valg i starten, så brugeren ikke skal andet end at starte det op
Noget andet jeg også syntes mangler i ihvertfald mine scripts, er ordentlig håndtering af fejl, og ikke mindst at scriptet skriver hvorhenne det fejlede. Er der nogen af jer der bruger det / ved hvordan det virker?
Som professionel softwareudvikler kan jeg har fortælle at du gør det rigtige.
Laver en funktion, der kan nøjagtig en ting, som så kan genbruges i det uendelige.
Det kaldes dekomposition at opdele en program i flere mindre overskuelige dele, hvor en del gerne skal kunne bruges mere end 1 gang.
Skal du lave en variant hvor der også skrives noget information og så et spørgsmål kan du wrappe din ja-nej funktion ind i en ny funktion der også tager 2 argumenter som er info* og spoergsmaaal. *:information
Jeg ville så vælge at ligge while løkken oppe i ja-nej-med_tekst funktionen. En anden ændring er at bruge en do while (uden true konstanst i while testen) konstruktion i stedet, men det findes ikke i bash.
Jeg ville vælge at kode i python i stedet på dette tidspunkt.
På nogle områder er bash lidt for simpelt, og i Pyhton kan komme noget længere, da der findes mange Python pakker.
Det gælder både til Python terminalprogrammer, og GUI Python programmer med GTK+ eller Qt toolkitet
Som sagt kan man lave et GUI program med et Python script:
I bonus kan man med Python også kode store programmer med GTK+ toolkittet via PyGtk: http://www.pygtk.org/about.html, og så får man lige pludselig pæne grafiske programmer.
/Lars