Linux – Shell enzo… deel 8
Na 7 delen Linux, Shell Enzo heb je al een goed idee van alle mogelijke commandoās en parameters de Linux Shell ons te bieden heeft. Met deze duizenden commandoās tot onze beschikking kunnen we onze computer ten volste benutten. Systeemtaken, werkprocessen, automatische taken, spelletjes etc. De gehele computer is met de shell / terminal te besturen. Maar⦠hoe onthoudt je alle commandoās? Niet! Het is onmogelijk om alle commandoās en parameters te onthouden. De echte kracht zit hem in de mogelijkheid om de computer het werk te laten uitvoeren. En juist om deze reden schrijven we āShell Scriptsā.
Shell scripts zijn scripts met een verzameling Shell commandoās. Het script voert deze commandoās uit via de door u opgegeven volgorde. Shell scripts schrijven we in een teksteditor naar keuze waarin we ASCII tekst kunnen lezen en schrijven.
Voordat we aan het script beginnen eerst een aantal basisregels:
- We starten een script met een zogenaamde āshebangā regel. In deze regel geef je de binary/applicatie op waarin het script gedraaid moet worden. In het geval van Bash is dat ā#!/bin/Bashā
- Alle overige tekst achter een hekje wordt gezien als ācommentā en wordt dus niet actief uitgevoerd. Aangeraden wordt om in de header van het script een omschrijving te plaatsen
- Maak je script leesbaar. Laat āchild regelsā dus netjes inspringen en gebruik waar nodig enters. Enters (witregels) worden door het script genegeerd.
- Zorg dat je werkt met duidelijke error codes zodat je ook weet waarom een script faalt. Je kunt je script ook testen in b.v. http://www.shellcheck.net/
- Tijdelijk bestand nodig, gebruik ā/bin/mktempā. B.v.: ātijdelijkbestand=$ (/bin/mktemp)
- Gebruik āegrepā voor regex. B.v.: āegrep ‘localhost|127\.0\.0\.1’ā
- Als een commando faalt gebruik dan āset -e”
Laten we met bovenstaande in gedacht beginnen aan ons eerste script.
Een simpel script ziet er dan als volgt uit. Let op de āshebangā, en de comment:
#!/bin/bash # My first script echo "Hello World!" |
Om het script uit te kunnen voeren moeten we het script eerst opslaan en uitvoerbaar maken middels chmod. Laten we het script opslaan als āmijnscriptā en uitvoerbaar maken via:
chmod 755 mijnscript |
Voor een privĆ© script welke niet door een andere gebruiker uitgevoerd mag worden kun je ā700ā gebruiken als permissieset.
Als je de juiste permissies hebt om het script uit te voeren kun je deze uitvoeren door het plaatsen van een ā./ā voor het script. Dus:
./mijnscript |
Dit werkt echter alleen als je in de juiste directory zit. Als je echter niet in de juiste directory zit dan zal het systeem je script niet vinden. Om dit te overkomen gaan we een directory āscriptsā aanmaken en toevoegen aan het pad (PATH). Alle paden in het āpadā van Linux worden wel doorzocht als een commando wordt uitgevoerd. Als je āscriptsā directory dus in het pad staat kun je op ieder moment je script uitvoeren (zonder toevoeging van ā./ā).
Alle huidige paden bekijken die in je pad staan:
echo $PATH |
Een scripts directory aanmaken en toevoegen aan het āPATHā:
mkdir /home/user/scripts export PATH=$PATH:/home/user/scripts |
Het nadeel van bovenstaande methode is dat deze toevoeging slechts tijdelijk is. Wanneer de computer gereboot wordt zal het āpadā hersteld zijn naar zijn default waardes.
Nog beter is het dus om het pad toe te voegen aan je ā.bash_profileā. Dit is een persoonlijk Bash profiel van de gebruiker welke iedere keer wordt uitgevoerd als een gebruiker inlogt. Om deze aan te maken en het pad toe te voegen doe je het volgende:
touch ~/.bash_profile nano ~/.bash_profile export PATH=$PATH:/home/user/scripts source ~/.bash_profile |
De eerste regel zorgt ervoor dat je Bash profiel script aangemaakt wordt (check dit eventueel met āls -allā). Met de 2e en 3e regel openen we het bestand in de Nano editor en voegen we het pad toe. Met de laatste āsourceā regel zorg je ervoor dat aanpassingen in het profiel meteen van toepassing zijn (i.p.v. na een reboot).
Een andere (en laatste) permanente methode is de private ābinā folder. Deze folder wordt toegevoegd aan de home directory van de user. In deze directory worden alle uitvoerbare applicaties en bestanden van die gebruiker geplaatst. Deze directory zou automatisch herkend moeten worden door je Linux distributie (hoewel dit niet bij alle distributie het geval is). Als je deze directory nog niet hebt kun je deze simpel aanmaken middels:
mkdir ~/bin |
Ok ⦠we hebben ons eerste script gemaakt, uitgevoerd en de scripts bin toegevoegd aan het PATH.
Wat gaan we nu doen? We gaan een stapje verder en gaan verschillende methodes bekijken hoe we een script meer dynamisch en krachtig kunnen maken.
Quotes, Backslashes, Operators e.t.c.
Voordat we het script kunnen aanvullen moeten we eerst een aantal zaken ophelderen.
In scripts komen diverse āquotingā symbolen voor. Deze symbolen hebben als doel dat het script goed geĆÆnterpreteerd wordt. Dus o.a. het samenvoegen van woorden en het bepalen van vervangingen.
Hierbij een aantal belangrijke symbolen uitgelegd.
- ā (dubbele quotes)
Dubbele quotes (ofwel āweak quotingā) worden gebruikt om woordgroepen te vormen. Wanneer woorden tussen dubbele quotes staan ziet Bash deze als 1. Bash zal niet elke woord separaat uitvoeren. Variabelen en Shell Expansions die gebruikt worden met dubbele quotes zullen nog gewoon werken. Binnen dubbele quotes hebben enkele quotes en wildcards geen functie en worden genegeerd. - ā (enkele quotes)
Enkele quotes (ofwel āstrong quotingā) is eveneens om woordgroepen te vormen. Het grote verschil met de dubbele quotes is dat er binnen de enkele quotes helemaal niets gebeurt. Variabelen worden niet uitgevoerd en alles wordt gezien als āplatte tekstā.
- \ (backslash)
De backslash verteld de shell om āhet volgende karakterā te negeren. Ze worden ook gebruikt om speciale karakters te gebruiken. Als het volgende commando een speciaal karakter is dan zal deze door de backslash genegeerd worden en als ānormaal symboolā geĆÆnterpreteerd worden. Zo kunnen we spaties gebruiken (zonder quotes) en kunnen we b.v. quotes meenemen als tekst i.p.v. als woordgroep. Hieronder zie je het idee:
Er bestaan ook speciale ābackslash escape karaktersā met een speciale functie zoals:
\n = Voegt een blanco lijn toe
\t = Voegt horizontale tabs toe
\a = Zorgt ervoor dat de terminal piept (alarm)
\\ = Backslash (de 2e slash wordt als normale slash gezien doordat de 1e backslash hem āescapedā
Dan zijn er ook nog speciale āoperatorsā die we kunnen gebruiken om specifieke waardes te controleren. De volgende operators komen we geregeld tegen:
-e (controleer of het bestand bestaat)
-f (controleer of bestand een gewoon bestand is en geen directory of systeembestand)
-s (controleer of bestandsgrote hoger is dan 0)
-d (controleer of het een directory is)
-h (controleer of het een symbolic link is)
-r (controleer of de file āreadā permissies heeft)
-w (controleer of de file āwriteā permissies heeft)
-x (controleer of de file āexecuteā permissies heeft)
-u (zet het user ID)
-eq (controleer of input (als integer) gelijk is aanā¦)
-ne (controleer of input (als integer) niet gelijk is aanā¦)
-gt (controleer of input (als integer) groter is danā¦)
-lt (controleer of input (als integer) kleiner is danā¦)
-le (controleer of input (als integer) kleiner OF gelijk is danā¦)
= (controleer of input (als string) gelijk is aanā¦)
!= (controleer of input (als string) niet gelijk is aanā¦)
> (controleer of input (als string) groter is danā¦)
< (controleer of input (als string) kleiner is danā¦)
-z (controleer of input (als string) leeg isā¦)
-n (controleer of input (als string) NIET leeg isā¦)
Voor iedereen die het niet weet. Een āstringā zijn 1 of meerdere karakters (meestal omsloten door quotes). De string kan uit allerlei karakters bestaan zoals letters, symbolen en cijfers. Een āintegerā is een waarde die alleen uit hele cijfers bestaat zoals 1, 100, 1000 maar geen letters of gedeelde cijfers zoals 10,5.
Alias
Een alias kan gebruikt worden in scripting maar kan ook voor andere doeleinden gebruikt worden. Een alias is een āandere naamā voor een bepaald commando. Aliassen kunnen handig zijn om lange commandoās een stuk korter of beter begrijpelijk te maken. Een voorbeeld van zoān alias is:
alias vandaag='date +"%A %-d %B %Y "' |
Wanneer bovenstaande commando b.v. wordt toegevoegd aan je Bash profiel dan kun je het commando date +”%A %-d %B %Y” gemakkelijk uitvoeren door simpelweg āvandaagā in te typen.
In bovenstaande commando zie ook de enkele en dubbele quotes weer terug. De enkele quotes zorgen ervoor dat het in zijn totaliteit 1 commando is en niet 5 separate woorden (door de spaties). De dubbele quotes zorgen ervoor dat de variabelen wel als variabelen worden uitgevoerd.
Functies
Nu we weten wat aliassen zijn kunnen we net zo goed meteen doorgaan met shell functies. āShell functionsā zijn āscripts binnen scriptsā ofwel sub-scripts. Je kunt een functie ook zien als een complexe alias. Met een functie vertaal je een compleet script naar een naam. Door het uitvoeren van die naam wordt de functie uitgevoerd. Zo kan een functie een combinatie zijn van meerdere commandoās.
Een functie wordt altijd aangeroepen met āfunction %functienaam%ā of met ā%functienaam% (). De verdere inhoud van die functie staat tussen brackets. Bijvoorbeeld:
function vandaag { echo āDe datum van vandaag isā date +"%A %-d %B %Y " } |
We zien hier dat een functie aanmaken genaamd āvandaagā. Deze functie bestaat uit 2 commandoās, namelijk een echo commando en een datum commando.
Als we bovenstaande script uitvoeren gebeurt er echter helemaal niks. We maken hier de functie aan maar de functie wordt nog niet uitgevoerd. Om de functie aan te roepen gebruiken we de functienaam:
function vandaag { echo āDe datum van vandaag isā date +"%A %-d %B %Y " } vandaag |
Variabelen
Variabelen zijn āopen plekkenā in het script die ingevuld gaan worden door specifieke content. Deze variabelen zijn dus geen vast waardes maar zijn waardes die afhankelijk van voorgaande content die door het script gegenereerd is of van voor gedefinieerde content. Variabelen zijn eigenlijk delen in het geheugen waar men informatie in op kan slaan onder een vooraf gedefinieerde naam.
Variabelen worden gemaakt met een ā=ā teken en opgeroepen met het dollar teken ($). Bijvoorbeeld:
a=Jarno b=Baselier echo āMijn voornaam is $aā echo āMijn achternaam is $bā |
De uitkomst van dit commando is:
In bovenstaande voorbeeld hebben we de variabele vast ingevuld. Deze kunnen we echter ook dynamisch laten vullen met de content van b.v. een ander commando.
Dit doen we door het commando tussen haakjes ()te plaatsen en voorafgaand aan die haakjes een dollarteken te zetten, dus:
a=$(ls āl) echo "De inhoud van mijn huidige directory is $a" |
I.p.v. haakjes kun je voor bovenstaande ook het ` teken gebruiken en het voorgaande dollar teken negeren. Dus:
a=`ls -l` echo "De inhoud van mijn huidige directory is $a" |
Het is goed om te weten dat zodra de opgeroepen variabele tussen dubbele quotes staat de output van het commando netjes tabs en nieuwe lijnen weergeeft. Als de variabele niet tussen quotes staat van wordt alle output achter elkaar geplakt en wordt er dus geen rekening gehouden met tabs en nieuwe regels.
Variabelen moeten beginnen met een letter en mogen geen spaties bevatten. Ook kun je geen naam gebruiken voor een variabele welke al gebruikt wordt in Bash. Gebruik dus geen namen die overeenkomen met commandoās e.d.
Het Linux systeem bestaat ook al uit een aantal systeem variabelen welke gebruikt kunnen worden. Deze variabelen kunnen bekeken worden met het āprintenvā commando. Zo bestaan de variabelen PATH en LOGNAME standaard in het systeem en kunnen dus ook altijd opgeroepen worden middels āecho $PATHā.
Positional Parameters
Net als systeem variabelen kent Bash een reeks aan āargumentenā ofwel āpositional parametersā. Deze parameters geven weer welke informatie aan het script gegeven op het moment dat deze gestart werd.
We kennen hierin een aantal genummerde variabelen:
$0 = het gehele pad en naam van het script
$1 = De 1e input na het pad en het script
$2 = De 2e input na het pad en het script
$3 = De 3e input na het pad en het script
etc.
Stel je voor dat ons script de volgende code zou hebben:
echo "Positional Parameters" echo '$0 = ' $0 echo '$1 = ' $1 echo '$2 = ' $2 echo '$3 = ' $3 |
En deze zouden we uitvoeren met:
# /home/user/Desktop/testscript |
Dan zou het resultaat er als volgt uitzien:
$0 = /home/user/Desktop/testscript $1 = $2 = $3 = |
Als we het script echter uit zouden voeren als:
# /home/user/Desktop/testscript extra input āvoor gevaarlijke codeā |
Dan ziet het resultaat er als volgt uit:
$0 = /home/user/Desktop/testscript
$1 = extra
$2 = input
$3 = voor gevaarlijke code
Om het totaal aantal āpositional parametersā te tellen gebruiken we de ā$#ā variabele.
Flow Controle
Bash scripts kennen ook flow controle commandoās. Dit zijn commandoās die bepalen welke delen van het script uitgevoerd worden. Zo kennen we de volgende belangrijke flow contol commandoās:
- if / then
Het āifā commando is een voorwaardelijk commando. Hier vertellen we bash om een deel van het script te voldoen als er aan een bepaalde voorwaarde voldaan wordt. Dit commando ziet er als volgt uit: āif %voorwaardeā ; thenā. Achter het āthenā commando plaatsen we de commandoās die uitgevoerd worden als er aan de voorwaarde voldaan is. Als er niet aan de voorwaarde is voldaan dan gebeurt er verder niets en gaat het script door nadat het āifā statement is afgesloten. De āifā wordt afgesloten met een omgedraaide āifā, dus āfiā. Bijvoorbeeld:if %voorwaarde% ; then commando fi
- else
Het else statement verteld wat er moet gebeuren als er niet aan de voorwaarde voldaan is. Dus als de voorwaarde matched doe dan A en anders B. Bijvoorbeeld:if %voorwaarde% ; then commando else commando fi
- elseif
De āelseifā wordt gebruikt om op een 2e conditie te controleren. Dus als de 1e conditie niet matched kijk dan of de 2e conditie matched. Zo niet voer dan niets uit en ga dan door naar de āfiā. Dus:if %voorwaarde% ; then commando elseif %voorwaarde% ; then commando fi
- while / do
Het āwhileā commando is een āloopā commando. āWhileā test de input en voert vervolgens een blok code uit tot de waarde niet meer aan de test voldoet. Een simpel voorbeeld:nummer=0 while [ $nummer -lt 5 ]; do echo "Nummer = $nummer" nummer=$((nummer + 1)) done
In dit script creĆ«ren we eerst een nummer variabele en geven deze als waarde ā0ā. Vervolgens zeggen we dat als het nummer lager dan 5 is de code uitgevoerd moet worden tot het ādoneā commando. Als het nummer hoger is dan wordt de code niet uitgevoerd en gaat het script verder na het ādoneā commando. Als de code wel uitgevoerd wordt dan tellen we 1 bij het nummer op. De while loop draait dus 5 keer.
Waar een āwhileā loop draait zolang de conditie ātrueā is kunnen we exact het omgekeerde doen. Hier draait de loop dus zolang de conditie āfalseā is. Dit doen we door āuntilā te gebruiken i.p.v. āwhileā. Deze loop kunnen we b.v. gebruiken om een menu te bouwen. Zie onderstaande voorbeeld:
selection= until [ "$selection" = "0" ]; do echo "" echo "MENU" echo "1 - Laat vrije schijfruimte zien" echo "2 - Laat vrij geheugen zien" echo "" echo "0 - exit menu" echo "" echo -n "Maak uw keuze: " read selection echo "" case $selection in 1 ) df ;; 2 ) free ;; 0 ) exit ;; * ) echo "Gebruik keuze 1, 2, of 0" esac done
- for
Het āforā commando geeft een variabele aan elk opgegeven waarde. We beginnen het āforā commando met het opgeven van de variabele gevolgd door āinā waarna we de waardes opgeven die deze variabele meekrijgen. Het āinā commando wordt weer gevolgd door het ādoā commando waarna we opgeven wat er vervolgens moet gebeuren. Deze loop sluiten we af met het ādoneā commando. Om een simpel voorbeeld te laten zien kunnen we de 4 woorden in het onderstaande āinā statement toekennen aan de variabele (i) en laten echoĆ«n. Dus eerste word woord 1 toegekend aan de waarde waarna deze geĆ«chood wordt. Vervolgens herhaald de loop dit voor woord 2 etc.for i in word1 word2 word3; do echo $i done
Het mooie aan de āforā loop is de manier waarop we het āinā statement kunnen invullen. In bovenstaande voorbeeld gebruikte we woorden. Maar het kan ook zo:
count=0 for i in $(cat ~/.bash_profile); do count=$((count + 1)) echo "Woord nummer $count = $i en bevat $(echo -n $i | wc -c) letters" done
In bovenstaande commando zetten we de count variabele op 0. Vervolgens kijken we in het bash_profile (opgegeven in het āinā statement). Hier krijgt iedere woord de variabele āiā en voor iedere keer dat de loop draait telt de variabele ācountā er 1 bij. Vervolgens wordt getoond het hoeveelste woord het is (count variabele) en welk woord het is (i variabele). Tenslotte wordt het woord (i variabeleā¦indien deze niet blanco is (-n)) gepiped naar het āwcā ofwel āword countā commando met de -c toevoeging om de letters te tellen. De output is dus elke woord aanwezig in het bash profile, incl. hoeveel letters het woord lang is.
Arrays
Een array betekend in het Engels een rij of reeks. Een array is een lijst met een index. Een array heeft ook een naam zodat we deze op iedere plek kunnen aanroepen. Zo kunnen we bijvoorbeeld de kleuren āroodā en āblauwā als volgt tonen:
kleur1='Blauw' kleur2='Rood' echo $color1 echo $color2 |
We kunnen deze waardes ook in een array zetten waar ākleur1ā toegewezen wordt aan index nummer 0 en ākleur2ā aan index nummer 1:
kleur=('Blauw' 'Rood') echo ${kleur[0]} echo ${kleur[1]} |
Zoals je kunt zien beginnen we een array met de naam van de array gevolgd door het = teken en dan de waardes van de array tussen de haakjes gescheiden met een spatie. Het is dus aan te raden om woorden tussen quotes te zetten zodat er ook woordgroepen aan een index toegewezen kunnen worden.
Er zijn verschillende soorten arrays zoals āpureā, āassociatieveā en ādynamischeā arrays. In feite is een array een variabele met meerdere waardes. De reden dat we arrays gebruiken is omdat de uiteindelijke code klein en goed leesbaar is. Daarnaast weet iedere developper wat een array is. Vanuit historisch oogpunt waren arrays ideaal omdat de geheugentoewijzing hiermee vastgelegd werdt en er dus zeer effectief naar een waarde in het geheugen gezocht kon worden. Dit is nog steeds belangrijk. Echter is dit met de moderne hardware en managed programmeertalen minder belangrijk dan vroeger.
Een ander voordeel aan een array is dat we direct waardes op een bepaalde positie op kunnen vragen. Om bijvoorbeeld de rode kleur op te vragen gebruiken we:
echo ${kleur[1]} |
We kunnen ook de gehele array als volgt opvragen:
echo ${kleur[@]} |
Of we kunnen het aantal items in de array tellen:
echo ${#kleur[@]} |
Read
Er is nog 1 extra scriptoptie die ik nog snel even wil vertellen alvorens we gaan debuggen. Dit is de āreadā functie. Met de read functie kan de gebruiker zelf tekst invoeren. Nadat de tekst is ingevoerd wordt de ingevoerde tekst opgeslagen in een variabele die later weer gebruikt kan worden.
Het volgende script:
read text echo "U heeft de volgende tekst ingevoerd: $text" |
Als men nu het script uitvoert kan men tekst invoeren. Als men het volgende invoert ābla bla blaā dan zal na het geven van een enter de volgende tekst verschijnen. Het read commando begint dus altijd met het commando zelf gevolgd door de variabele waarin de getypte tekst opgeslagen mag worden.
U heeft de volgende tekst ingevoerd: bla bla bla |
Samen met het read commando kunnen we ook de -t (time) optie gebruiken om de gebruiker slechts een X aantal seconde de tijd te geven om te typen (en om ervoor te zorgen dat het script zonder input vast blijft hangen). Dit doen we als volgt:
echo -n "Snel⦠type iets en druk op ENTER! > " if read -t 3 response; then echo "Heel goed⦠dat heb je snel gedaan" else echo "Oeps⦠je bent te traag!" fi |
Debuggen
Ook debuggen is ontzettend belangrijk in een script. Om een script goed te debuggen bestaand er diverse methodes. Het uitvoeren van een commando en script genereerd altijd een error code. Zelfs als we deze niet gedefinieerd hebben. Door wel de juiste exit codes te definiƫren en om de flow control op orde te hebben wordt debuggen een stuk gemakkelijker.
Laten we eerst een naar de āexit codesā kijken. Een script kan namelijk stoppen met 256 verschillende āexit codesā variĆ«rend van 0 tot 255 waar de 0 code staat voor succes en er dus 255 overige error codes zijn. Daarvan zijn de codes 1,2,126,127,128,130,255 ook gereserveerde systeemcodes. Dat betekend dat we als gebruiker nog 248 error codes over hebben om te gebruiken.
We kunnen de laatste exit code ophalen met de ā$?ā variabele. Dus:
echo $? |
Dit werkt ook bij een script. Deze exit code is echter alleen van toepassing op het laatste commando. Als het laatste commando succesvol is maar alle voorgaande commandoās falen zal de exit code alsnog een 0 (succesvol) zijn. We kunnen exit codes gebruiken om debugging een stuk makkelijker te maken.
We kunnen de $? variabele ook in een script gebruiken. We roepen deze aan in een āifā flow na het uitvoeren van een commando om te achterhalen of het uitgevoerde commando succesvol was. Dus:
mkdir temp if [ $? -eq 0 ] then echo "De temp directory is aangemaakt" else echo " De temp directory is NIET aangemaakt " >&2 fi |
Bovenstaande voorbeeld zal een duidelijke foutmelding genereren maar als men na het draaien van het script de exit code bekijkt zal deze nog steeds 0 zijn. Het laatste commando (de echo) is namelijk wel succesvol uitgevoerd.
Om dit tegen te gaan kunnen we het exit commando gebruiken. Na het uitvoeren van het exit commando stopt het script met de opgegeven exit code. Bijvoorbeeld:
#exit 100 betekend dat de ātempā directory niet aangemaakt is #exit 101 betekend dat de temp sub directory niet aangemaakt is. mkdir temp if [ $? -eq 0 ] then echo "De temp directory is aangemaakt" else echo " De temp directory is NIET aangemaakt " >&2 exit 100 fi mkdir temp/sub if [ $? -eq 0 ] then echo "De sub directory is aangemaakt" else echo " De sub directory is NIET aangemaakt " >&2 exit 101 fi exit 0 |
Bash heeft ook een default debug functie. Dit is de ābash -x” functie. Op het moment dat je een script uitvoert met dit commando zal Bash het script in debug modes draaien en de output en eventuele problemen op het scherm tonen. Dus:
bash -x mijnscript |
Om slechts een deel van het script te debuggen zet je een deel van het script in debug modes. Dit doe je door dat deel te ontsluiten met āset -x” en sluit je af met āset +xā . Zie:
set -x commando om te debuggen set +x |
Een ingewikkelder script
Met al deze kennis kunnen we al een groot aantal ingewikkelde scripts maken. Bekijk het volgende script maar eens:
#!/bin/bash # Up script van Anuraag Sinha. # Met het āUp scriptā maken we een functie aan die we kunnen gebruiken om een X # aantal directies omhoog te gaan in Bash. Noem dit script āup.shā. # Plaats het script in een directory (b.v. ā~/scripts/up.shā) en zet de volgende code in je ~/.bash_profile: # āalias updir ='. ~/scripts/up.sh'ā zodat het script altijd aangeroepen kan worden met het āupā commando. # Om vervolgens 2 directies omhoog te gaan typ je āup 2ā. UPDIR_LVL=$1 if [ $# -lt 1 ]; then UPDIR_LVL=1 fi UPDIR="" for i in `seq 1 $UPDIR_LVL`; do UPDIR="$UPDIR../" done cd $UPDIR |
Allereerst maken we een variabele (UPDIR_LVL) aan en die stellen we in op de eerste positional parameter (dus het cijfer met het aantal stappen omhoog, laten we zeggen 3). Vervolgens maakt men een āifā statement die wordt uitgevoerd indien de input lager is dan 1. Dan zetten we de āUPDIR_LVLā variabele vast op 1. Dan volgt een nieuwe āifā loop waarbij we de huidige waarde van āUPDIR_LVLā gaan gebruiken. Deze loop wordt namelijk iedere keer uitgevoerd voor de waarde van āUPDIR_LVLā. Als deze dus 3 is wordt de loop 3x uitgevoerd. Iedere keer dat de loop uitgevoerd wordt schrijft deze de waarde ā../ā weg naar de variabele āUPDIRā. Na 3 keer is deze waarde dus ā../../../ā. Nadat de loop klaar is wordt het volgende commando uitgevoerd: ācd ../../../ā waardoor de gebruiker dus 3 directories omhoog gaat.
Conclusie
Hopelijk heb ik jullie met bovenstaande uitleg een goede basis gegeven om te starten met je eerste shell script. Gebruik de kracht van scripts om het werk een stuk gemakkelijker te maken. Veel processen zijn te automatiseren en shell scripts zijn hier uitermate geschikt voor.
Als je deze informatie interessant en handig vond dan zou het awesome zijn als je dit bericht wilt delen / liken / uitprinten en boven je bed hangen ⦠etcā¦
Op naar het laatste deel uit deze Linux ā Shell Enzo reeks. Op naar deel 9.





