Fixed formating and layouts of all the reports

This commit is contained in:
Jack-Benny Persson 2013-12-30 20:39:11 +01:00
parent 0d73f45df7
commit add6527bab
8 changed files with 150 additions and 41 deletions

View File

@ -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 Bashs 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 Bashs 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
```

View File

@ -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`.

View File

@ -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.

View File

@ -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.

View File

@ -1,4 +1,6 @@
# Laborationsrapport 5 #
Jack-Benny Persson <br>
LX13
## Syfte ##
Förstå och kunna använda loopar.

View File

@ -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

View File

@ -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 ##

View File

@ -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/"`.