Fixed formating and layouts of all the reports
This commit is contained in:
parent
0d73f45df7
commit
add6527bab
@ -2,46 +2,61 @@
|
||||
|
||||
## Syfte ##
|
||||
|
||||
Grunderna i Bash. Att efter genomförd laboration få praktisk erfarenhet av att skräddarsy. Bashmiljön. Förstå hur Wildcards och Braces fungerar i praktiken. Kunna navigera i bashmiljön och förstå vad Bash’s olika konfigurationsfiler gör.
|
||||
Notera att laborationens uppgifter både finns inbakade i texten och under frågesektionen.
|
||||
Grunderna i Bash. Att efter genomförd laboration få praktisk erfarenhet av att
|
||||
skräddarsy. Bashmiljön. Förstå hur Wildcards och Braces fungerar i praktiken.
|
||||
Kunna navigera i bashmiljön och förstå vad Bash’s olika konfigurationsfiler gör.
|
||||
Notera att laborationens uppgifter både finns inbakade i texten och under
|
||||
frågesektionen.
|
||||
|
||||
## Tillvägagångsssätt ##
|
||||
|
||||
### Test och experiment ###
|
||||
|
||||
Tillsammans med [daemonicus666](https://github.com/daemonicus666) gjorde vi ett litet script med awk som tog uptime kommandot och filtrerade ut så endast uptimen visades på skärmen. Scriptet finns på [uptime.sh](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb1/uptime.sh)
|
||||
Tillsammans med [daemonicus666](https://github.com/daemonicus666) gjorde vi
|
||||
ett litet script med awk som tog uptime kommandot och filtrerade ut så endast
|
||||
uptimen visades på skärmen.
|
||||
Scriptet finns på [uptime.sh](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb1/uptime.sh)
|
||||
|
||||
### Frågor och uppgifter ###
|
||||
|
||||
1. Vad kommer att listas vid följande kommando?
|
||||
* `ls -la [a]*[!e]`
|
||||
|
||||
Listar alla filer som börjar på __a__ och innehåller ett fritt antal tecken och som inte slutar på ett __e__.
|
||||
Listar alla filer som börjar på __a__ och innehåller ett fritt antal
|
||||
tecken och som inte slutar på ett __e__.
|
||||
* `ls -la *[f-i]?`
|
||||
|
||||
Listar alla filer som börjar på ett fritt antal tecken och sedan innehåller __f__ till __i__ och sedan bara ett enda tecken. T.ex. filen __aagl__ kommer visas, men inte __aaaglll__.
|
||||
Listar alla filer som börjar på ett fritt antal tecken och sedan
|
||||
innehåller __f__ till __i__ och sedan bara ett enda tecken. T.ex.
|
||||
filen __aagl__ kommer visas, men inte __aaaglll__.
|
||||
* `ls -la ????.[co]`
|
||||
|
||||
Listar alla filer som innehåller fyra tecken, en punkt, och sedan ett __c__ eller ett __o__.
|
||||
|
||||
2. Om du vill lista alla filer som börjar på a och slutar på .c, vilken wildcard använder du då?
|
||||
2. Om du vill lista alla filer som börjar på a och slutar på .c, vilken
|
||||
wildcard använder du då?
|
||||
```bash
|
||||
ls a*.c
|
||||
```
|
||||
|
||||
3. Om du skriver `ls -la >> /test/test`, vad händer då?
|
||||
|
||||
Den skriver alla ut en fillista till filet /test/test. Körs raden igen kommer den skriva fylla på med listan efter den förra listan i samma fil.
|
||||
Den skriver alla ut en fillista till filet /test/test. Körs raden igen
|
||||
kommer den skriva fylla på med listan efter den förra listan i
|
||||
samma fil.
|
||||
|
||||
4. Lista alla filer i hela filsystemet till en fil som heter ls-laR.gz, den ska alltså också vara komprimerad, eventuella felmeddelanden ska hamna i ls-laR-errors.txt.
|
||||
4. Lista alla filer i hela filsystemet till en fil som heter ls-laR.gz, den ska
|
||||
alltså också vara komprimerad, eventuella felmeddelanden ska hamna i
|
||||
ls-laR-errors.txt.
|
||||
```bash
|
||||
ls -laR | gzip > ls-laR.gz 2> ls-laR-errors.txt
|
||||
```
|
||||
|
||||
5. Vad är miljövariabeln PATH för något? Hur lägger du till katalogen ~/bin till PATH?
|
||||
Hur gör du så att denna ändring sker vid varje inloggning?
|
||||
5. Vad är miljövariabeln PATH för något? Hur lägger du till katalogen ~/bin
|
||||
till PATH? Hur gör du så att denna ändring sker vid varje inloggning?
|
||||
|
||||
PATH håller reda på binärer i systemet. För att lägga till ~/bin i min egen PATH redigerar jag min ~/.profile och lägger till följande innehåll
|
||||
PATH håller reda på binärer i systemet. För att lägga till ~/bin i min
|
||||
egen PATH redigerar jag min ~/.profile och lägger till följande innehåll
|
||||
```bash
|
||||
if [ -d "$HOME/bin" ] ; then
|
||||
PATH="$HOME/bin:$PATH"
|
||||
@ -50,16 +65,62 @@ Hur gör du så att denna ändring sker vid varje inloggning?
|
||||
|
||||
6. Vad händer om du skriver `top` i .bash\_logout?
|
||||
|
||||
Top körs vid utloggning, dock bara om man är i ett login-shell, d.v.s. om man loggar in via en riktig terminal, typ CTRL+ALT+F2.
|
||||
Top körs vid utloggning, dock bara om man är i ett login-shell, d.v.s.
|
||||
om man loggar in via en riktig terminal, typ CTRL+ALT+F2.
|
||||
|
||||
7. Hur använder du mekanismen `pushd`, `popd` och `dirs`?
|
||||
|
||||
Pushd används för att lägga in kataloger i dir-stacken samt byta till katalogen man anger. Popd används för att byta tillbaks till katalogerna från dir-stacken, en i taget. När man använder popd försvinner katalogen en efter en från dir-stacken. Dirs kommandot används för att lista katalogerna i dir-stacken.
|
||||
Pushd används för att lägga in kataloger i dir-stacken samt byta till
|
||||
katalogen man anger. Popd används för att byta tillbaks till katalogerna
|
||||
från dir-stacken, en i taget. När man använder popd försvinner katalogen
|
||||
en efter en från dir-stacken. Dirs kommandot används för att lista
|
||||
katalogerna i dir-stacken.
|
||||
|
||||
8. Vad är ett "null kommando" och varför finns det?
|
||||
|
||||
Kolon (":") är ett null kommando och returnerar alltid 0 från $? (värdet från senaste körda kommandot). D.v.s det är ett kommando som faktiskt körs men inte gör något, men returnerar 0 i exit status. T.ex. kan man använda detta istället för ett faktiskt kommando om man måste ha ett sant returvärde från något. Exempelvis i en while-stats i script. Eller bara rakt upp och ner vid prompten för att testa ett script man gjort som är beroende av ett sant returvärde.
|
||||
Kolon (":") är ett null kommando och returnerar alltid 0 från $?
|
||||
(värdet från senaste körda kommandot). D.v.s det är ett kommando som
|
||||
faktiskt körs men inte gör något, men returnerar 0 i exit status. T.ex.
|
||||
kan man använda detta istället för ett faktiskt kommando om man måste
|
||||
ha ett sant returvärde från något. Exempelvis i en while-stats i script.
|
||||
Eller bara rakt upp och ner vid prompten för att testa ett script man
|
||||
gjort som är beroende av ett sant returvärde.
|
||||
|
||||
## Reflektion ##
|
||||
|
||||
Det var en lärorik första laboration med tanke på att där var en hel del nytt att lära sig, bland annat null-kommandot och pushd, popd, dirs. Det är aldrig fel att gå tillbaks till grunderna för att få en stabilare grund att stå på när det gäller scripting.
|
||||
Det var en lärorik första laboration med tanke på att där var en hel del nytt
|
||||
att lära sig, bland annat null-kommandot och pushd, popd, dirs. Det är aldrig
|
||||
fel att gå tillbaks till grunderna för att få en stabilare grund att stå på när
|
||||
det gäller scripting.
|
||||
Dessa tre kommandon kan också snabba upp navigeringen väsentligt när man arbetar
|
||||
mycket i CLI-läge. De flesta känner säkert till att `cd ~` tar en tillbaks till
|
||||
ens hemkatalog. Man kan använda dir-stacken på liknande sätt. Låt oss ta några
|
||||
exempel på detta.
|
||||
```bash
|
||||
jake@olivia:~$ dirs
|
||||
~
|
||||
jake@olivia:~$ pushd scripts_grundkurs/
|
||||
~/scripts_grundkurs ~
|
||||
jake@olivia:~/scripts_grundkurs$ # Vi vill nu fixa lite i /etc
|
||||
jake@olivia:~/scripts_grundkurs$ pushd /etc
|
||||
/etc ~/scripts_grundkurs ~
|
||||
jake@olivia:/etc$ # Fixar lite... nu vill vi tillbaks till scriptingen
|
||||
jake@olivia:/etc$ dirs -v
|
||||
0 /etc
|
||||
1 ~/scripts_grundkurs
|
||||
2 ~
|
||||
jake@olivia:/etc$ # Notera att scripts_grundkurs är nr 1 på listan
|
||||
jake@olivia:/etc$ pushd +1
|
||||
~/scripts_grundkurs ~ /etc
|
||||
jake@olivia:~/scripts_grundkurs$ # Tada, man kan även går såhär:
|
||||
jake@olivia:~/scripts_grundkurs$ dirs -v
|
||||
0 ~/scripts_grundkurs
|
||||
1 ~
|
||||
2 /etc
|
||||
jake@olivia:~/scripts_grundkurs$ cd ~2
|
||||
jake@olivia:/etc$ dirs -v
|
||||
0 /etc
|
||||
1 ~
|
||||
2 /etc
|
||||
jake@olivia:/etc$ # Dock försvann då scripts_grundkurs från dir-stacken
|
||||
```
|
||||
|
@ -1,14 +1,21 @@
|
||||
# Laborationsrapport 2 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
|
||||
Att förstå ett grundläggande bash-script, kunna hantera variabler och läsa data från tangentbordet.
|
||||
Att förstå ett grundläggande bash-script, kunna hantera variabler och läsa data
|
||||
från tangentbordet.
|
||||
|
||||
## Tillvägagångssätt ##
|
||||
|
||||
### Test, experiment & noteringar ###
|
||||
|
||||
Under tiden laborationen läses igenom testas en del olika nya saker, framförallt med `read` och `printf`. De exempel som ges i laborationen känns nyttiga och lite vidare utforskning av `printf` görs genom att skapa ett enkelt script som skriver ut en headern till en faktura på skärmen [invoice.sh](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb2/invoice.sh).
|
||||
Under tiden laborationen läses igenom testas en del olika nya saker, framförallt
|
||||
med `read` och `printf`. De exempel som ges i laborationen känns nyttiga och
|
||||
lite vidare utforskning av `printf` görs genom att skapa ett enkelt script som
|
||||
skriver ut en headern till en faktura på skärmen
|
||||
[invoice.sh](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb2/invoice.sh).
|
||||
|
||||
### Övningar ###
|
||||
|
||||
@ -21,5 +28,9 @@ Resterande övningar finns här på GitHub
|
||||
|
||||
## Reflektion ##
|
||||
|
||||
Övningarna var ganska snabbt avklarade, dock var [övning 4](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb2/ovning4.sh) väldigt intressant och utmanande.
|
||||
Självklart var alla övningarna intressanta då jag själv sällan använt `read` särskilt mycket. Det var också intressant att få ytterliggare övningar med `printf`.
|
||||
Övningarna var ganska snabbt avklarade, dock var
|
||||
[övning 4](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb2/ovning4.sh)
|
||||
väldigt intressant och utmanande.
|
||||
Självklart var alla övningarna intressanta då jag själv sällan använt `read`
|
||||
särskilt mycket. Det var också intressant att få ytterliggare övningar
|
||||
med `printf`.
|
||||
|
@ -1,11 +1,12 @@
|
||||
# Laborationsrapport 3 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
|
||||
Förstå och kunna hantera villkor med test. Både gällande strängar, filer och matematiska villkor.
|
||||
Förstå och kunna hantera villkor med test. Både gällande strängar, filer och
|
||||
matematiska villkor.
|
||||
|
||||
## Tillvägagångssätt ##
|
||||
|
||||
Declare och test-värden testas lite i början av labben. Exempelvis:
|
||||
|
||||
jake@elektra:~$ declare -x StringTest="Hej"
|
||||
@ -22,7 +23,8 @@ Declare och test-värden testas lite i början av labben. Exempelvis:
|
||||
jake@elektra:~$ echo $?
|
||||
0
|
||||
|
||||
Detta är ett enkelt sätt att testa olika test-scenarion utan att behöva skapa ett helt nytt script varje gång man vill prova på något bara.
|
||||
Detta är ett enkelt sätt att testa olika test-scenarion utan att behöva skapa
|
||||
ett helt nytt script varje gång man vill prova på något bara.
|
||||
|
||||
### Övningsupptifter ###
|
||||
|
||||
@ -35,4 +37,7 @@ Samtliga övningsuppgifter finns här på GitHub
|
||||
|
||||
## Reflektion ##
|
||||
|
||||
Som vanligt lärorikt att gå tillbaks till grunderna, så mycket man missat när man kodat tidigare. Det är lätt man bara använder det man kan och struntar i allt annat, trots att koden hade blivit bättre om man hade tagit sig tiden att läsa på lite.
|
||||
Som vanligt lärorikt att gå tillbaks till grunderna, så mycket man missat när
|
||||
man kodat tidigare. Det är lätt man bara använder det man kan och struntar i
|
||||
allt annat, trots att koden hade blivit bättre om man hade tagit sig tiden
|
||||
att läsa på lite.
|
||||
|
@ -1,7 +1,10 @@
|
||||
# Laborationsrapport 4 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
Förstå hur man använder kommandot let för att utföra grundläggande räkning. Även att behärska parameter substitution (dollarsign substitution).
|
||||
Förstå hur man använder kommandot let för att utföra grundläggande räkning.
|
||||
Även att behärska parameter substitution (dollarsign substitution).
|
||||
|
||||
## Tillvägagångssätt ##
|
||||
|
||||
@ -12,7 +15,9 @@ echo $Summa
|
||||
12
|
||||
```
|
||||
|
||||
Ovanståede kod är enkel och fungerar bra, det som blir problem är precis som texten säger, när man delar något som inte går jämnt ut. Man får då resten som modulus enligt nedan
|
||||
Ovanståede kod är enkel och fungerar bra, det som blir problem är precis som
|
||||
texten säger, när man delar något som inte går jämnt ut. Man får då resten som
|
||||
modulus enligt nedan
|
||||
```bash
|
||||
let Summa="10/3"
|
||||
echo $Summa # Svaret blir 3, eftersom 3*3=9
|
||||
@ -24,11 +29,14 @@ let Summa="10%3"
|
||||
echo $Summa # Svaret blir 1, efter 3*3=9+1=10, alltså resten är 1.
|
||||
```
|
||||
|
||||
Istället för `let` kan man instället skriva `Summa=$((4+4)); echo $Summa` och vi får svaret 8.
|
||||
Istället för `let` kan man instället skriva `Summa=$((4+4)); echo $Summa` och
|
||||
vi får svaret 8.
|
||||
|
||||
### Parameter Substitution / Expansion ##
|
||||
Skillnaden mellan `echo ${Param:=Hej}` och `echo ${Param=Hej}` är att första exemplet,
|
||||
d.v.s. där vi har kolon (:) så kommer "Hej" att skrivas om $Param är tom och inte satt (unset). Om vi skriver utan kolon å andra sidan så testas bara om $Param är tom.
|
||||
Skillnaden mellan `echo ${Param:=Hej}` och `echo ${Param=Hej}` är att första
|
||||
exemplet, d.v.s. där vi har kolon (:) så kommer "Hej" att skrivas om $Param är
|
||||
tom och inte satt (unset). Om vi skriver utan kolon å andra sidan så testas
|
||||
bara om $Param är tom.
|
||||
|
||||
```bash
|
||||
Me=""
|
||||
@ -36,7 +44,8 @@ echo ${Me=Yay} # Skriver inte ut något
|
||||
echo ${Me:=Yay} # Skriver ut Yay samt säter $Mee till Yay
|
||||
```
|
||||
|
||||
Det finns även andra operatorer förutom lika med (=). Nedan listas dessa med exempel
|
||||
Det finns även andra operatorer förutom lika med (=). Nedan listas dessa med
|
||||
exempel
|
||||
```bash
|
||||
Me=""
|
||||
echo ${Me-Yay} # Skriver inte ut något (eftersom Me är satt)
|
||||
@ -47,25 +56,35 @@ echo ${Test10:+Då} # Skriver ut Då, men lämnar $Test10 till "Hej"
|
||||
unset Test10
|
||||
echo ${Test10:+Då} # Skriver inte något då $Test10 är unset
|
||||
|
||||
echo ${Test20:?Missing} # Skriver ut "Missing" till STDERR eftersom $Test20 är unset
|
||||
echo ${Test20:?Missing} # Skriver ut "Missing" till STDERR eftersom $Test20
|
||||
är unset
|
||||
```
|
||||
|
||||
### Övningar ###
|
||||
* [Övning 1](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb4/ovning1.sh)
|
||||
* [Övning 2](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb4/ovning2.sh)
|
||||
* [Övning 3, script 1](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb4/ovning3_script1.sh)
|
||||
* [Övning 3, script 2](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb4/ovning3_script2.sh)
|
||||
|
||||
## Reflektion ##
|
||||
En lösning på problemet med att Bash bara räknar med int är att istället använda `bc` (Bench Calculator) istället för `let` i Bash.
|
||||
Observera dock här att `bc` inte heller räknar mer än int (heltal) som standard. T.ex. så blir `echo "10/3" | bc` också 3. Tricket här att är att ställa in __scale__ variablen till `bc`. T.ex. så blir `echo "scale=3;10/3" | bc` helt korrekt 3.33.
|
||||
En lösning på problemet med att Bash bara räknar med int är att istället
|
||||
använda `bc` (Bench Calculator) istället för `let` i Bash.
|
||||
Observera dock här att `bc` inte heller räknar mer än int (heltal) som standard.
|
||||
T.ex. så blir `echo "10/3" | bc` också 3. Tricket här att är att ställa
|
||||
in __scale__ variablen till `bc`. T.ex. så blir `echo "scale=3;10/3" | bc`
|
||||
helt korrekt 3.33.
|
||||
|
||||
En annan cool sak som stod i laborationen var det om Variable Substution. Att kunna tilldela en variabel ett specifikt värde om den är tom, t.ex `Variabel=""; echo ${Variabel:=test}`.
|
||||
Att kunna byta ut strängar i variabler är också en häftig funktion och väldigt "sed lik". T.ex. nedanstående kodstycke
|
||||
En annan cool sak som stod i laborationen var det om Variable Substution.
|
||||
Att kunna tilldela en variabel ett specifikt värde om den är tom,
|
||||
t.ex `Variabel=""; echo ${Variabel:=test}`.
|
||||
Att kunna byta ut strängar i variabler är också en häftig funktion och
|
||||
väldigt "sed lik". T.ex. nedanstående kodstycke
|
||||
```bash
|
||||
Var="Hej alla glada"
|
||||
Var=${Var/glada/sura}
|
||||
echo $Var # "Hej alla sura" skrivs ut
|
||||
```
|
||||
|
||||
Att kunna söka efter variabler är också trevligt, typ `echo ${!U}` som kommer att matcha t.ex. UID och USER.
|
||||
Att kunna söka efter variabler är också trevligt, typ `echo ${!U}` som kommer
|
||||
att matcha t.ex. UID och USER.
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
# Laborationsrapport 5 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
Förstå och kunna använda loopar.
|
||||
|
@ -1,4 +1,6 @@
|
||||
# Laborationsrapport 5 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
Ha koll på funktioner i bash, samt hur man passar ett argument till ett skript
|
||||
|
@ -1,4 +1,6 @@
|
||||
# Laborationsrapport 7 #
|
||||
Jack-Benny Persson <br>
|
||||
LX13
|
||||
|
||||
## Syfte ##
|
||||
Kunna implementera dialog med bash-scripting.
|
||||
@ -9,12 +11,14 @@ något större än tidigare labbar.
|
||||
Både Dialog och Zenity är för mig helt nytt.
|
||||
|
||||
### Dialog ###
|
||||
_--backtitle_ är det som visas i bakgrunden överst på skärmen i dialogrutorna. Måtten t.ex.
|
||||
10 60 som används i labbexemplen är tecken, alltså 10 tecken hög och 60 tecken bred.
|
||||
_--backtitle_ är det som visas i bakgrunden överst på skärmen i dialogrutorna.
|
||||
Måtten t.ex.
|
||||
10 60 som används i labbexemplen är tecken, alltså 10 tecken hög och 60
|
||||
tecken bred.
|
||||
|
||||
### Zenity ###
|
||||
Zenity är hur coolt som helst. Att kunna skapa GUI-applikationer utav sina shellscripts är hur
|
||||
kul som helst!
|
||||
Zenity är hur coolt som helst. Att kunna skapa GUI-applikationer utav sina
|
||||
shellscripts är hur kul som helst!
|
||||
|
||||
## Reflektion ##
|
||||
|
||||
|
@ -121,4 +121,9 @@ cat file.txt | sed -n '2,5w newfile.txt'
|
||||
Fler exempel finns i denna mappen i form av bland annat en rad awk-skript.
|
||||
|
||||
## Reflektion ##
|
||||
|
||||
Det som var intressant och tog ett tag att klura ut var skillnaden på
|
||||
dubbelapostrof och enkelapostrof när man använder sed. Använder man
|
||||
enkelapostrofer som används i princip alla exempel och böcker i ämnet så kan man
|
||||
inte använda värdet av variabler från Bash i sed. T.ex. `sed 's/$Ord/nytt ord/'`
|
||||
fungerar inte. Däremot med dubbelapostrofer fungerar det alldeles utmärkt,
|
||||
`sed "s/$Ord/nytt ord/"`.
|
||||
|
Loading…
x
Reference in New Issue
Block a user