UNIX-skal är inte bara interaktiva kommandotolkar utan även fullfjädrade programmeringsspråk. I detta avsnitt ska vi berätta hur man kan programmera i Bash.
Det är inte svårt att göra egna program i Bash.
I princip placerar man bara en följd av
Bash-kommandon i en fil.
Kommandona utförs i tur och ordning när programmet körs.
Låt oss som exempel konstruera ett program som skriver ut
texten ''Hej, världen!''.
Så här skulle man göra det från prompten:$ echo 'Hej, världen!'
Hej, världen!
$ Men nu ska vi istället skapa en
fil som innehåller detta kommando.
Filen kallar vi för hejvärlden.
I UNIX har man som konvention att
på första raden i ett sådant program
skriva tecknen #! och därefter
ange vilken tolk som ska köra det.
Filen ska alltså se ut så här
(skapa den med hjälp av Emacs och ge den namnet hejvärlden):
#!/bin/bash echo 'Hej, världen!'Nu är det dags att prova programmet. Först måste vi sätta filrättigheterna så att hejvärlden blir ett körbart program:$ ls -l hejvärlden
-rw-rw-r-- 1 göran göran 33 nov 10 00:29 hejvärlden
-rw-rw-r-- 1 göran göran 33 nov 10 00:29 hejvärlden*
Hej, världen!
/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/usr/games:.
Hej, världen!
/home/göran/bin:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/usr/games:.
Hej, världen!
Man kan använda variabler i Bash-program, precis som vid prompten. Vi minns från avsnitt 6.1 att man måste sätta ett dollartecken framför variabelnamnet om man vill referera till variabelns värde. Vi ska nu skriva ett program som frågar efter ett namn och därefter ger en artig hälsning. Så här kan det se ut:
#!/bin/bash echo 'Ange ditt namn:' read NAMN echo "Hej, $NAMN!"Kommandot read NAMN läser in en text och sätter värdet av variabeln NAMN till denna text. På sista raden av programmet använder vi citationstecken i stället för apostrofer, för annars byter Bash inte ut $NAMN mot värdet av NAMN. Vi antar att programmet finns sparat i en exekverbar fil med namnet hej i katalogen bin. Låt oss prova:$ hej
Ange ditt namn:
Hej, Göran!
#!/bin/bash read -p 'Ange ditt namn: ' NAMN echo "Hej, $NAMN!"Därefter kör vi programmet igen:$ hej
Ange ditt namn: Göran Andersson
Hej, Göran Andersson
Man kan också låta de egna Bash-programmen läsa in argument. Det första argumentet skrivs $1, det andra $2 osv. Vi gör en ny version av programmet hej, som tar emot namnet i form av ett argument istället:
#!/bin/bash echo "Hej, $1!"Då fungerar det så här:$ nyhej Kalle
Hej, Kalle!
Hej, Nisse!
Man kan säga att 1 fungerar som en variabel i Bash, och dess värde (som man får genom att skriva $1) är det första argumentet. Det finns ett antal andra sådana så kallade parametrar i Bash. Parametrarna 2, 3... står för det andra respektive tredje argumentet osv. (För att få värdet av tex det trettonde argumentet måste man skriva ${13}. Om man skriver $13, så tolkas det som värdet av den första parametern följt av en trea.) Parametern 0 står för det nollte argumentet, som är det namn programmet anropades under. Parametern * står för samtliga argument, från det första till det sista, separerade av mellanslag, och # står för antalet argument. Här är ett exempelprogram.
#!/bin/bash
echo "Totalt $# argument."
echo "Det trettonde argumentet är ${13}."
Programmet talar först om hur många argument det fick,
och skriver sedan ut sitt trettonde argument.
Vi sparar programmet under namnet argument
i katalogen bin.$ argument 1 2 3 4 5 6 7 8 9 10 11 12 Tretton 14
Totalt 14 argument.
Det trettonde argumentet är Tretton.
Totalt 8 argument.
Det trettonde argumentet är .
Vi ändrar programmet nyhej till följande:
#!/bin/bash echo "Hej, $*!"Nu skriver programmet ut samtliga argument i stället för bara det första.$ nyhej Kalle
Hej, Kalle!
Hej, Nisse Nilsson!