Exam Flashcards

1
Q

Et viktig trekk ved terminal-bruk på UNIX-/Linux-systemer, er de mange små verktøyene/programmene som hver er spesialsert på én enkelt funksjon (enkeltfunksjonsprogrammer).

Forklar og vis med et eksempel, hvordan enkeltfunksjonsprogrammer kan brukes sammen på en kommandolinje for å gjøre en oppgave som krever flere funksjoner.

A

Kommandoen grep brukes til å finne linjer i en tekst som innholder treff angitt med søkemønster. F.eks. gir vil følgende kommando liste alle linjene i filen telefonliste.txt som inneholder navnet Hansen: grep Hansen telefonliste.txt
Dersom det er ønskelig å sortere utskriften fra grep-kommandoen, kan programmet sort brukes til dette. Ved å koble utskriften fra grep til innlesning i sort, kombineres funkjsonene. Koblingen gjøre med et rør (engelsk: pipe), som angis med tegnet ‘|’. De sammenkoblede kommandoene vil se slik ut på kommandolinjen:
grep Hansen telefonliste.txt | sort

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Forklar og illustrer med et eksempel hvordan variabler kan (1) opprettes og (2) brukes på kommandolinjen.

A

Variabeler opprettes ved hjelp på tilordning. Det er viktig at det ikke er mellomrom før og etter tegnet ‘=’. Her er et eksempel som oppretter variabelen A og gir den verdien abc:

A=abc
Dersom variabelverdien inneholder tegn som har spesiell betydnding i kommandotolkeren (shellet/skallet), så må verdien omsluttes av anførselstegn – enkle eller doble. I eksemplet under innholder verdien tegnene ‘;’ og ‘ ‘, som begge har spesiell betydning

A=”a;b c”

For å bruke varaiblene navngis de i kommandoer, prefikset med tegnet ‘$’. F.eks.: For å skrive ut verdien til variablen A, kan følgende kommando brukes:

echo $A

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Forklar og vis med et eksempel, forskjellen på en miljøvariabel (environment variabel), og en variabel som ikke er det.

A

Hver programkjøring/prosess har et miljø (environment) som innholder en liste med variabler og deres verdier. Variabler som er nevnt i lista, kalles miljøvariabler – i motsetning til de andre. Poenget med å miljøvariabelen er at de går i arv, og dermed blir en måte å sende data inn i et program.
I eksemplet under opprettes de to variabelene A og B. På linje 3 blir B gjort til en miljøvariabel.

1: A=hei # oppretter variabelen A og gir den verdien “hei”
2: B=hopp # oppretter variabelen B og gir den verdien “hopp”
3: export B # setter variabelen B i miljøvariabellista

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Tenk deg at du har flere programkjøringer (prosesser) fordelt over flere sesjoner. Hvilken av disse verktøyene ville du brukt for å liste opp alle programkjøringene dine?

A

ps

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Forklar og gi et eksempel hvordan filer kan (1) opprettes (2) brukes (3) kopieres (4) endres og (5) slettes på kommandolinjen – uten bruk av editor.

A

(1) Opprettelse
Filer kan opprettes ved at utskrift fra en fil redirigeres til en fil som ikke eksisterer fra før. F.eks. hvis filen nyfil.txt ikke eksisterer, kan den opprettes slik:

echo nytt innhold i den nye fila mi > nyfil.txt
Vi har også brukt kommandoen touch i mange eksempler. Dens kommandlinjeargumenter tolkes som filstier (file paths). Dersom disse filene ikke eksisterer opprettes de. I eksempelet under brukes touch til å opprette de tre filene A, B og C.

touch A B C
(2) Bruk
I Linux/Unix er mye representert som filer. Vi sier ofte at “alt er filer” i Linux/Unix. Mange kommandoer skriver og/eller leser derfor til/fra filer. Ofte er de laget slik at om de kalles uten argumenter, så leser de fra filen som er knyttet til standard inngang (STDIN) og skriver til filen som er knyttet til standard utgang (STDOUT) – og at dersom andre filer skal brukes så angis de som argumenter – eller ved hjelp av redirigering. Eksempelet under leser fra filen usortert.txt og skriver til sortert.txt ved hjelp av redirigering.

sort < usortert.txt > sortert.txt
En annen variant, som gjør det samme, men som angir filen som skal leses fra ved hjelp av et kommandolinjeargument:

sort usortert.txt > sortert.txt
(3) Kopiering
For å kopiere en fil i Linux, kan du f.eks. bruke kommandoen cp. For å kopiere filen minfil.txt og kalle den minfil-kopi.txt, kan du skrive følgende kommando:

cp minfil.txt minfil-kopi.txt
Det er også mulig å lage en kopi ved hjelp av en kommando som skriver ut innholdet i en fil (f.eks. cat), og redirigere denne utskriften til en ny fil.

cat minfil.txt > minfil-kopi.txt
(4) Endring
Endringer i filer kan gjøres ved at filinnholdet erstattes eller skjøtes på.

Eksempel på erstatning:

echo “Dette kommer i stedet for det gamle innholdet.” > gammel_fil.txt
Eksempel på påskjøting:

echo “Dette blir lagt til på slutten – etter det gamle innholdet.”&raquo_space; gammel_fil.txt
Studentene har hatt en del eksempler og oppgaver med bruk av kommandoen sed. Denne kan produsere ny tekst basert på en ekisterende tekst. Ved å bruke bruke opsjonene -i (for ‘inline’), vil den nye teksten skrives til samme fil som den opprinnelige filen ble lest fra. For eksempel, hvis du vil erstatte alle forekomster av “Hello” med “Hi” i filen “minfil.txt”. i minfil.txt, kan du skrive følgende kommando:

sed -i ‘s/Hello/Hi/g’ minfil.txt
(5) Sletting
For å slette en fil på kommandolinjen i Linux/Unix, kan du bruke kommandoen rm (eller unlink). For eksempel, hvis du vil slette “minfil.txt”, kan du skrive følgende kommando:

rm minfil.txt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Forklar og vis med et eksempel hvordan kommandolinjeargumenter kan brukes til (1) å sende data som input til et shell-skript, og (2) hvordan dataene kan brukes i shell-skriptet.

A

!/bin/sh

På kommandolinjen, kan vi legge til argumenter etter navnet på skriptet. Her er et eksempel på et shell-skript som bruker de tre første kommandolinjeargumentene:

echo “Fornavn: $1”
echo “Etternavn: $2”
echo “Alder: $3”
Hvis vi nå kaller skriptet fra kommandolinjen med tre argumenter, vil skriptet bruke disse argumentene og skrive ut innholdet i hver av dem. For eksempel, hvis du lagrer dette skriptet som mitt-skript.sh og kjører følgende kommando på kommandolinjen:

./mitt-skript.sh Pia Nøtt 30
, så vil skriptet skrive ut:

Fornavn: Pia
Etternavn: Nøtt
Alder: 30

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Skriv et shell-skript som (1) leser inn tekst fra en fil som heter tekst.txt (2) sorterer linjene i teksten alfabetisk og (3) lagrer den sorterte teksten til tekst_sortert.txt. La skriptet være kommentert slik at det kommer tydelig frem hvordan de ulike delene av skriptet bidrar til å besvare oppgaven. Vis også hvordan du gjør skriptet kjørbart.

A

!/bin/sh

Her er to varianter. Først en “pedagogisk” og tungvindt variant som gjør hvert spesifiserte trinn for seg, og lagrer resultatet i en variabel, og en løsning som gjør alt med en kommando.

Her er den tungvindte (og mer resursskrevende) varianten:

Leser inn tekst fra tekst.txt
text=$(cat tekst.txt)

Sorterer linjene alfabetisk
sorted_text=$(echo “$text” | sort)

Lagrer den sorterte teksten i tekst_sortert.txt
echo “$sorted_text” > tekst_sortert.txt
Her er den mer effektive (og mye bedre) varianten:

Kommandoen sort leser fila tekst.txt (1), sorterer innholdet
# alfabetisk (2) og skriver resultatet ut. Utskriften er redirigert
# til fila tekst_sortert.txt (3).

sort tekst.txt > tekst_sortert.txt
For at skriptene skal være kjørbare, må de gis kjøretillatelse. Det kan gjøres med kommandoen chmod, f.eks. slik:

chmod +x skriptnavn.sh=

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Kommandoen bg setter noe i bakgrunnen. Hva settes i bakgrunnen?

A

en jobb

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Hvilken av påstandendene er sann dersom følgende kommandolinje kjøres uten feil?

A

Variabelen A får nytt innhold.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Lag et kommentert skript som gjør følgende ved kjøring:

Sjekker om det finnes en katalog (directory) i brukerens hjemmekatalog (home directory) som heter kat1. Dersom en ikke finnes fra før, så blir den opprettet.
Oppretter et git-repositorium (repo) i katalogen som ble opprett.
Oppretter tre tomme filer som heter A, B og C i repoets arbeidstre (working tree).
Legger A og B (ikke C), til repoets klargjøringsområde (staging area).
Forplikter (commit) A (ikke B og C), slik at den blir innregistrert selve repo’et. Sørg også for at en forklarende tekst blir loggført.
Kloner repoet til en annen katalog, som også ligger i brukerens hjemmekatalog. Den skal hete kat2.
Sørg for at det fremkommer i kommentarene hvilke deler av skriptet som besvarer de ulike delene av oppgaveteksten.

A

!/bin/sh

Sjekker om katalogen kat1 finnes i hjemmekatalogen
if [ ! -d ~/kat1 ]
then
# Oppretter katalogen kat1 hvis den ikke finnes
mkdir ~/kat1
fi

Går til katalogen kat1
cd ~/kat1

Oppretter et git-repositorium i katalogen kat1
git init

Oppretter tre tomme filer i arbeidstreen
touch A B C

Legger A og B til klargjøringsområdet (staging area)
git add A B

Forplikter (commit) kun A med en forklarende tekst
git commit -m “Legger til filen A” A

Går tilbake til hjemmekatalogen
cd

Kloner repoet fra kat1 til kat2
git clone kat1 kat2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Lag et shell-skript som (1) leser inn en tekst fra fil (2) behandler teksten (3) skriver den behandlede tekst til en ny fil.

Behandlingen går ut på å bytte ut alle forekomster av et bestemt ord (opprinnelig ord) et bestemt annet ord (erstatningsord).

Skriptet skal la brukeren oppgi følgende data som input til skriptet:

Stien (path) til filen som den opprinnelige teksten skal leses fra
Stien (path) til filen som den behandlede teksten skal skrives til
Opprinnelige ord (som skal erstattes)
Erstatningsord.
Du kan selv velge måte skriptet får dataene inn.

Sørg for at det fremkommer i kommentarene hvilke deler av skriptet som besvarer de ulike delene av oppgaveteksten.

A

Her kommer tre varianter som bruker ulike måter å hente data inn fra brukeren: (1) Fra fil (standard inngang / STDIN) (2) fra kommandolinjeargumenter (3) miljøvariabler.

Fra fil (standard inngang / STDIN)
#!/bin/sh

Les inn data fra brukeren
echo “Oppgi stien til filen som skal leses:”
read INNFIL

echo “Oppgi stien til filen som den behandlede teksten skal skrives til:”
read UTFIL

echo “Oppgi ordet som skal byttes ut:”
read OPPR_ORD

echo “Oppgi NYTT_ORDet:”
read NYTT_ORD

Behandle teksten og skriv til ny fil
sed “s/$OPPR_ORD/$NYTT_ORD/g” $INNFIL > $UTFIL
Fra kommandolinjeargumenter
#!/bin/sh

Les inn kommandolinje-argumenter
INNFIL=”$1”
UTFIL=”$2”
OPPR_ORD=”$3”
NYTT_ORD=”$4”

Behandle teksten og skriv til ny fil
sed “s/$OPPR_ORD/$NYTT_ORD/g” $INNFIL > $UTFIL
Anta at skriptet heter skript.sh og ligger i aktiv katalog. For å bruke skript.sh til å lage en variant av fila ./fil.txt, hvor “Hei” er byttet med “Hopp”, og hvor den nye fila heter =./ny.txt” må følgende kommando gis:

./skript.sh fil.txt ny.txt Hei Hopp
Miljøvariaber
For å bruke denne versjonen av skriptet, må du sette miljøvariablene før du kjører skriptet, f.eks. slik:

export INNFIL=fil.txt
export UTFIL=ny.txt
export OPPR_ORD=Hei
export NYTT_ORD=Hopp
./skript.sh
#!/bin/sh

Bruker miljøvariabler til å behandle teksten og skrive til ny fil
# (Her forhåndskontrollerer vi ikke om variablene har innhold, det bør
# normalt gjøres)

sed “s/$OPPR_ORD/$ERSTATNINGSORD/g” $INNFIL > $UTFIL

echo “Behandlet tekst er skrevet til $UTFIL.”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hva gjør kommandoen echo A?

A

Skriver ut bokstaven A.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Vil du si at Linux er …

A

et operativsystem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hvordan blir rettighetene til filen abc etter en vellykket kjøring av kommandoen chmod 751 abc?

A

rwxr-x–x

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Under ser du noen filstier (file paths). Hvilken av disse er ikke relativ?

A

/a/b/c/..

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Hvilken av disse følgende kommandoer kan ikke brukes filkopiering?

A

ln

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Hva gjør kommandoen cat A?

A

Skriver ut det som er lagret i filen A.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

PATH er en …

A

variabel som inneholder en liste med kataloger

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hvilken av disse linuxkommandoene vil du ikke bruke når du leter etter en bestemt fil, som du har vet navnet på?

A

pstree

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hvilken av disse påstandene er usann?

A

En jobb kan bare inneholde én programkjøring.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hvilken av påstandendene er usann dersom følgende kommandolinje kjøres uten feil?

A

Det som var i filen A fra før, blir overskrevet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Hvis arbeidskatalogen inneholder filene abc, bcd og cde, hva blir utskriften av følgende kommandolinje:

A

./bcd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Følgende to kommandolinjer gir samme utskrift.

echo abc bcd cde | cut -d” “ -f2
echo abc bcd cde | awk -F “ “ ‘{print $2}’
Hvilken av alternativene under viser riktig utskrift?

A

bcd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Hva blir utskriften av følgende kommandolinje:

echo abc bcd cde | sed s/.$/xyz/

A

abc bcd cdxyz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hvilken av påstandene under er sann om en vellykket kjøring av kommandoen git add abc?

A

Kommandoen legger abc i et klargjøringsområde (staging area).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hva blir utskriften av følgende kommandolinje:

echo abc bcd cde | grep e

A

abc bcd cde

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Hvilken av påstandene er sann?
Skjulte filer …

A

har alltid filnavn som begynner med punktum

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

For å se skjulte filer i en katalog. Hvilken av kommandoene under ville du brukt?

A

ls -a

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

I hjemmekatalogen sin gjør brukeren tux følgende kommandoer: mkdir a; cd a; git init. Et nytt git-repositorium er nå opprettet. Hvor er repoet lagret?

A

I katalogen .git

12
Q

Hvilke av følgende kodeliner vil ikke gi følgende utsrkrift: Agata Beate?

A

echo Agatha Beathe | sed ‘s/h//’

13
Q

Hvilken av disse påstandene er usann?

A

tmux har innebygd god funksjonalitet for skriving av shell-skript.

13
Q

I din arbeidskatalog ligger katalogen a. Katalogen a inneholder et git-repositorium. Du gjør følgede kommandoer: git clone a b; cd b; touch A; git add A; git commit -m ‘A’; cd … På hvilke filstier (file paths) kan vi finne filen A nå?

A

b/A

14
Q

Hvilken av påstandene under er sann om en vellykket kjøring av kommandoen git commit?

A

Den registrerer filendringer til et repositorium (repo).

14
Q

Anta at du er innlogget som brukeren a007 på et normalt oppsatt linux-system (som f.eks. web01.usn.no). I hjemmekatalogen din er kun følgende tre filer: 12345, 23456, og 34567. Hjemmekatalogen er også den aktive katalogen (arbeidskatalogen / working directory / active directory). Hvilken av følgende kommandoer vil da ikke liste alle opp alle tre filene?

A

ls ../345

15
Q

Hvilken av disse kommandolinjene vil ikke gi utskriften ABC? Anta at A ikke finnes på forhånd.

A

A=ABC; echo ‘echo $A’ | sh

15
Q

Følgende kommandolinje ble nettopp kjørt i en tom katalog: echo A>a; ln a b; ln -s a c; rm a. Nå innheholder katalogen en eller flere filer. Hvor mange av de filene i katalogen inneholder tegnet A ?

A

1

15
Q

Utskriften fra kommandoen ls -l ble drwxr-xr-x 9 aaa bbb 4096 nov. 16 15:27 ccc. Hvilken av disse påstandene er da sann?

A

aaa eier ccc

15
Q

Hva brukes shebang (#!) til i et skript?

A

For å angi hvilket program som skal tolke og kjøre skriptet.

15
Q

Tekstfilen liste innholder en liste med mange personnavn. Hver linje er ordnet slik: fornavn,etternavn. En av linjene kan f.eks. se slik ut: Espen,Askeladden. Hvilken av følgende kommandolinjer lister ut etternavnene, slik at de kommer alfabetisk og at ingen av linjene er like.

A

cut -f2 -d, liste | sort | uniq

16
Q

Shell-skriptet s inneholder bl.a. følgende linje: for I in $@; do echo $I; done. Hva blir utskrift av linjen dersom skriptet kjøres med følgende kommando: ./s x y z?

A

x y z (skrevet på hver sin linje)

16
Q

Aktiv katalog inneholder programmet p og skriptet s. Programmet p returner alltid heltallet 0. Shell-skriptet s inneholder bl.a. følgende linje: if $1; then echo x $?; else echo y $?; fi. Hva blir utskrift av linjen når følgende kommando kjøres: ./s ./p?

A

x 0

16
Q

Shell-skriptet s inneholder følgende på linje nr. 2:

echo $A #A
Hva blir utskrift av linjen dersom skriptet kjøres med følgende kommando: export A=1; ./s 2?

A

1

16
Q

Du skriver data inn på standard inngang (STDIN). Hva ville du trykket på tastaturet for å angi slutten på fila (end-of-file/EOF)?

A

CTRL-d

16
Q

Shell-skriptet s inneholder bl.a. følgende linje: echo $0 $#. Hva blir utskriften av linjen dersom skriptet kjøres med følgende kommando: ./s x y z?

A

./s 3

17
Q

Du jobber i terminalen. Hva ville du trykt på tastaturet for å få frem den forrige kommandolinjen du skrev?

A

pil-opp-tast på tastaturet

17
Q

Du vil ha en symlenke (symbolsk lenke) til katalogen /tmp i din egen hjemmekatalog. Hvilken av kommandoene under ville du brukt til dette?

A

ln -s /tmp ~

17
Q

Shell-skriptet s inneholder følgende på linje nr. 2: for I in $(seq $A); do echo $I+$A; done. Hva blir utskrift av linjen dersom skriptet kjøres med følgende kommando: A=1 ./s 2?

A

1+1

17
Q

Du vil kopiere katalogen /var/www med alt innhold (alle underkataloger og filer) til din egen hjemmekatalog. Hvilken av kommandoene under ville du brukt til dette?

A

cp -r var/www ~

17
Q

Anta at kommando er en vanlig kommando og fil er en tekstfil. Hvilken av følgende kommandoliner gir da mening?

A

kommando < fil

17
Q

Hvilken av kommandoene under ville du brukt å skjøte utskriften fra kommandoen ls -l til filen xxx.txt?

A

ls -l&raquo_space; xxx.txt

18
Q

Hvilken av kommandoene under ville satt arbeidskatalogen til rot-katalogen?

A

cd /

18
Q

Lag et shell-skript gjør følgende:

Oppretter og innregistrerer (commit) én fil med beskrivende melding i den ene klonen.
Oppretter og innregistrerer (commit) én annen fil med beskrivende melding i den andre klonen.
Sørger for at de to repositoriene (det første og det nakne) er synkronisert (d.v.s. innholder det samme).

A

!/bin/sh

cd klone1
touch a
git add a
git commit -m “la til a”
git push
cd ..

git -C klone2 pull
touch klone2/b
git -C klone2 add b
git -C klone2 commit -m “la til b”
git -C klone2 push

git -C klone1 pull

18
Q

Et shell-skript gjør følgende:
skjøter sammen de to første kommandolinjeargumentene, slik at ingen tegn skiller dem,
lagrer de sammen-skjøtede kommandolinjeargumentene i en variabel,
skriver ut variabelens verdi tre ganger på samme linje, slik at utskriften kommer til syne i terminalen.

A

!/bin/sh

A=$1$2
echo $A $A $A

19
Q

Hvilken av kommandoene under ville du brukt for å starte programmet abc slik at det kjører i bakgrunnen?

A

abc &

20
Q

Lag et shell-skript gjør følgende:

Oppretter nakent (engelsk: bare) repositorium (repo) katalog. Et nakent repositorium har ikke arbeidstre, og brukes ofte som et sentralt fjern-repo (remote). Tips: Bruk opsjonen –bare.
Lager to kloner av det nakne repositoriet.
Setter ulike brukernavn og e-postadresser for de to klonene

A

!/bin/sh

git –bare init nakent

git clone nakent klone1
git clone nakent klone2

git -C klone1 config –local user.name “Ares”
git -C klone2 config –local user.email ares@localhost

git -C klone2 config –local user.name “Mars”
git -C klone2 config –local user.email mars@localhost

20
Q

Lag et test-skript som demonstrerer at skriptet over (fra 1.1) virker.

A

!/bin/sh

./o1.1.sh a b

20
Q

Lag et shell-skript som tester skriptet fra 1. automatisk – uten at et menneske trenger å skrive inn noe på tastaturet. Skriptet skal:

Opprette miljøvariabelen,
demonstrere at skriptet over (fra 3.1) virker både ved likhet og
ved ulikhet.

A

!/bin/sh

export B
B=”en linje”
echo en linje | ./o3.sh
B=”en annen linje”
echo en linje | ./o3.sh

20
Q

Under ser du et eksempel på kjøring av noen kommandoer i en terminal:

$ A=1
$ ./05.sh
A:
$ export A
$ ./05.sh
A: 1
$ unset A
$ ./05.sh
A:
Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o5.sh ved hjelp av en editor i terminalen.
Test skriptet før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 5.tar.gz: o5.sh.

A

!/bin/sh

echo A: $A

21
Q

En fil inneholder kun én linje.

Et shell-skript gjør følgende:

Leser filas innhold og
lagrer filinnholdet i en variabel.
Gjennomgår en løkke tre ganger.
For hver runde i løkka, skriver ut variabelens verdi på slutten av en annen fil.
Sørger for at denne andre fila ikke finnes før løkka starter.

A

!/bin/sh

A=$(cat abc)
rm -f bcd
for I in 1 2 3; do
echo $A&raquo_space; bcd
done

21
Q

Lag et test-skript som demonstrerer at skriptet over (fra 2.1) virker. Skriptet skal:

Først opprette fila som inneholder kun én linje,
deretter kjøre skriptet fra 1., slik at den nye fila med tre linjer opprettes og
til slutt skrive ut innholdet av den nye fila, slik at de tre linjene kommer til syne i terminalen.

A

!/bin/sh

echo en linje > abc
./o2.sh
cat bcd

21
Q

Under ser du et eksempel på kjøring av noen kommandoer i en terminal. Skriptet ./o3.sh sorterer linjer alfabetisk.

$ cat cbf
C
B
F
$ cat ead
E
A
D
$ cat cbf ead | ./o3.sh
A
B
C
D
E
F
$ ./o3.sh < cbf
B
C
F
Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o3.sh ved hjelp av en editor i terminalen.
Demonstrer at skriptet virker før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 3.tar.gz: o3.sh.

A

!/bin/sh

sort

21
Q

Skriv et shell-skript som

leser en linje fra standard inngang (STDIN) – altså fra tastaturet/terminalen, eller fra en program-kjøring av et annet program.
tester om den innleste linjen er lik verdien av en miljøvariabel som ble satt før skriptet startet.
skriver ut en melding på terminalen, som forteller om det var likhet eller ikke.

A

!/bin/sh

read A
if [ “$A” = “$B” ]; then
echo De to er like
else
echo De to er ulike
fi

21
Q

Under ser du et eksempel på kjøring av noen kommandoer i en terminal:

$ ./o4.sh
Bruk: ./o4.sh sti1 sti2 … stiN
$ ./o4.sh a /a/b/ a/b/c a/c
a (relativ)
/a/b/ (absolutt)
a/b/c (relativ)
a/c (relativ)
$ ./o4.sh /home/tn ../../abc
/home/tn (absolutt)
../../abc (relativ)
Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o4.sh ved hjelp av en editor i terminalen.
Demonstrer at skriptet virker før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 4.tar.gz: o4.sh.

A

!/bin/sh

if [ $# -lt 1 ]; then
echo Bruk: ./o4.sh sti1 sti2 … stiN
fi
for STI in $@; do
if echo $STI | grep -q ^/
then
echo “$STI (absolutt)”
else
echo “$STI (relativ)”
fi
done

21
Q

Lag en makefile som kan brukes til å lage tar.gz-filer for tar.gz-filene til denne eksamen (o1.tar.gz, o2.tar.gz, … , o5.tar.gz). Slik at når kommandoen make utføres, så

bygges de tar.gz-filene som trengs å bygges (enten fordi filene de skal inneholde er oppdatert, eller fordi de mangler) – de øvrige skal ikke bygges på nytt.
Makefila må altså inneholde et mål for hver tar.gz-fil og ett for alle tilsammen.

A

all: o1.tar.gz o2.tar.gz o3.tar.gz o4.tar.gz o5.tar.gz o6.tar.gz

o1.tar.gz: o1.1.sh o1.2.sh
tar czvf o1.tar.gz o1.1.sh o1.2.sh

o2.tar.gz: o2.1.sh o2.2.sh
tar czvf o1.tar.gz o2.1.sh o2.2.sh

o3.tar.gz: o3.1.sh o3.2.sh
tar czvf o3.1.sh o3.2.sh

o4.tar.gz: o4.1.sh o4.2.sh o4.3.sh
tar czvf o4.tar.gz o4.1.sh o4.2.sh o4.3.sh

o5.tar.gz: o5.1.sh o5.2.sh
tar czvf o5.tar.gz o5.1.sh o5.2.sh

o6.tar.gz: makefile
tar czvf o6.tar.gz makefile

22
Q

Lag et shell-skript som tester skriptene over (fra 4.1 og 4.2), ved å gjøre følgende:

Kjører de to skriptene (fra 4.1 og 4.2) – slik at de tre repositoriene: opprettes, får/mottar filene og synkroniseres.
Skriver ut git-loggen fra begge repositoriene til slutt.

A

!/bin/sh

./o4.1.sh
./o4.2.sh

git -C klone1 log
git -C klone2 log

22
Q

Lag et shell-skript som produserer to nye tekstfiler med utgangspunkt i en eksisterende tekstfil og et nøkkelord, slik at:

tekstfila og nøkkelordet blir oppgitt enten som argumenter, miljøvariabel eller en kombinasjon av disse.
dersom tekstfil og/eller nøkkelord ikke er oppgitt, skrives bruksmåte ut og skriptet avsluttes
den ene nye tekstfila vil inneholde linjene i utgangspunkt-tekstfila som inneholder nøkkelordet, men ingen av linjene som ikke inneholder nøkkelordet.
den andre nye fila inneholder det samme som den første nye fila, men med nøkkelordet byttet ut med teksten “XXXX”.

A

!/bin/sh

if [ $# -lt 2 ]; then
echo Bruk: $0 nøkkelord filsti
exit
fi

grep $1 $2 > fil1
sed “s/$1/XXXX/g” $2 > fil2

22
Q

Lag et shell-skript for å teste skriptet over (fra 5.1), som gjør følgende:

Det oppretter en tekstfil som skriptet i 1. kan ta utgangspunkt i.
Det tester skriptet over (fra 5.1) både med nøkkelordet og fil-sti – og uten.

A

!/bin/sh

cat «EOF > utgangspunkt
Sing, goddess, the wrath of Achilles Peleus’ son, the ruinous wrath
that brought on the Achaians woes innumerable, and hurled down into
Hades many strong souls of heroes, and gave their bodies to be a prey
to dogs and all winged fowls; and so the counsel of Zeus wrought out
its accomplishment from the day when first strife parted Atreides king
of men and noble Achilles.
EOF

./o5.1.sh
./o5.1.sh Achilles utgangspunkt
cat fil2
cat fil1

22
Q

Under ser du et eksempel på to kjøringer av skriptet o1.sh i en terminal:
$ ./o1.sh en to tre
tre to en
$ ./o1.sh fire fem seks
seks fem fire
Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o1.sh ved hjelp av en editor i terminalen.
Test skriptet før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 1.tar.gz: o1.sh.

A

!/bin/sh

echo $3 $2 $1

23
Q

Under ser du et eksempel på to kjøringer av skriptet o2.sh i en terminal:

$ echo A:B:C:D | ./o2.sh
A:C
$ echo 1:2:3:4 | ./o2.sh
1:3
Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o2.sh ved hjelp av en editor i terminalen.
Demonstrer at skriptet virker før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 2.tar.gz: o2.sh.

A

!/bin/sh

cut -d: -f1,3

23
Q
A
24
Q

Skriptet o6.sh gjør følgende:

Oppretter et nytt git-repositorium (git repo).
Oppretter filene A, B og C i samme katalog hvor du opprettet git repo’et.
Setter A og B (ikke C) i klargjøringsområdet (staging area)
Innregisterer A (ikke B og ikke C) i repositoriumet, med en passende melding.

Pass på at kandidatnummeret står i kommandoprompten i stedet for studentnummeret, før du starter script-sesjonen.
Lag skriptet o6.sh ved hjelp av en editor i terminalen.
Test skriptet før du avslutter script-sesjonen.
Følgende fil skal, i tillegg til typescript og tidsfil, være med i 6.tar.gz: o6.sh.

A

!/bin/sh

mkdir nytt_reo
cd nytt_repo
git init
touch A B C
git add A
git commit -m “Innregistrerer A”
git add B