BASH. Bourne-Again SHell. Eric Elfving Institutionen för datavetenskap (IDA)

Relevanta dokument
TDIU01 - Programmering i C++, grundkurs

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Emacs. Eric Elfving Institutionen för Datavetenskap (IDA)

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Olika shell. Skalprogrammering. Pipor och omdirigering av strömmar

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Uttryck, satser och strömhantering

kommando -fl argument

Grundläggande datalogi - Övning 1

Uppgift 1 (grundläggande konstruktioner)

U N I X G R U N D K U R S Ö V N I N G S U P P G I F T E R

Programmeringsteknik med C och Matlab

TDDC76 - Programmering och Datastrukturer

Introduktionslaboration

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Strängar. Strängar (forts.)

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDP002 Imperativ programmering

komplex av nödvändiga, understödjande program som kallas Utanpå OS existerar ett - eller flera olika - slags skal som

Tilpro Övning 1. Per-Anders Staav (föredrar att kallas Pa) Kan nås via epost: (fast de flesta frågor besvaras nog bäst av Alexander)

Variabler och konstanter

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Tilpro Övning Per-Anders Staav (vikarierande) (föredrar att kallas Pa) Kan nås via epost:

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Lathund för UNIX och Emacs

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Guido van Robot och olika UNIX-kommandon

Tips och tricks. Några bra tips. Lägg till sökvägar

i LabVIEW. Några programmeringstekniska grundbegrepp

Tentaupplägg denna gång

Exempel på ett litet Ada-program

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

TDP002 - Imperativ programmering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Användarhandledning Version 1.2

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Sätt att skriva ut binärträd

Textbearbetning i skalet och man-sidor

Introduktion till MATLAB

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

Terminal vad det är vad man kan göra med den

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

For att fa information om kommandon eller program sa nns det manualsidor. Dessa

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Programmeringsteknik och C DD1316

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Översikt. Texthantering med bl.a. kommandona cat, less och grep Omdirigering och piping Gnuplot. Linux 2 2 / 12

Programmering i C, 7,5 hp

TDP002 - Imperativ programmering

Beräkningsvetenskap föreläsning 2

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Övningsuppgifter kapitel 8

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

TDIU01 - Programmering i C++, grundkurs

Översikt över Visual Basic

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Kompilera och exekvera Javakod

Xemacs, första hjälpen!

Kommunicerande system

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

PROGRAMMERING-Java Omtentamina

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Språket Python - Del 2 Grundkurs i programmering med Python

Kort-kort om utdelade användarkonton och datormiljön på NADA

1.#Bakgrund# En#kort#introduk+on#+ll#Unix# Klassiskt#första#bemötande# Håkan#Jonsson# Ins+tu+onen#för#systemteknik# Luleå#tekniska#universitet#

Uppgift 1 (Sorterade heltal som är OK)

Introduktionslaboration

[] Arrayer = Indexerad variabel

Uppgift 1 (Oläsliga krypterade meddelanden)

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

SF1546, Numeriska Metoder för O1 Lab0 - frivillig. (dvs uppgifterna behöver inte redovisas!)

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Introduktion till PHP

C++ - En introduktion

Transkript:

BASH Bourne-Again SHell Eric Elfving Institutionen för datavetenskap (IDA)

BASH sh-compatible command language interpreter Kan startas på två sätt: Login shell Kör init-filer i följande ordning: /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile Kör filen ~/.bash_logout när bash avslutas Interactive Kör filen ~/.bashrc vid uppstart (kan skippas med flaggan norc) Inläsning och utskrift sker mot en terminal 2

3 SYNTAX (OCH SEMANTIK)

Syntax i BASH Ett kommando består av en lista av en sekvens av en eller flera pipelines Varje pipeline separeras av en av operatorerna ;, &, && eller och kan avslutas av ;, & eller <newline> Om en pipeline avslutas med & körs det i bakgrunden i ett subshell, med ; väntar bash istället tills körningen är klar. && och betyder logiskt och respektive logiskt eller. En pipeline skrivs som kommando1 [ kommando2 ] där utskriften från kommando1 skickas som inmatning till kommando2. 4

Sammansatta uttryck (list) list körs i ett eget subshell { list; } Gruppering, list körs i nuvarande miljö. { och } måste separeras från list med whitespace ((uttryck)) uttryck beräknas, vid ett nollskilt värde ges resultatet 1, annars 0 [[ villkor ]] Strängar kan jämföras med operatorerna ==,!=, < och >. Den högra strängen kan vara ett mönster. Med operatorn ~= tolkas den högra operanden som ett reguljärt uttryck 5

Villkor Det finns flera test att göra på filer: -a file Sann om file finns -d file Sann om file finns och är en mapp -f file Sann om file finns och är en vanlig fil -r, -w, -x file Sann om file finns och är läs-, skriv- respektive körbar Andra bra tester: -n string Sann om string har längd > 0 Val1 OP val2 OP kan vara en av eq, -ne, -lt, -le, -gt, -ge. Ger sant om val1 är lika, inte lika, mindre än, mindre eller lika med, större respektive större eller lika med val2 för heltalsvärden. 6

Upprepning for name [ in word ] ; do list ; done Fungerar likt for-loopen i Python, intererar över orden i word name tar nuvarande värde och list utförs för varje värde. for (( uttryck1 ; uttryck2 ; uttryck3 )) ; do list ; done Inledningsvis beräknas uttryck1. uttryck2 beräknas och om det är nollskilt utförs list och därefter beräknas uttryck3. Om uttryck2 blir noll avbryts upprepningen while list1; do list2; done Upprepa list2 tills den sista pipen i list1 returnerar 0 7

Selektion if list; then list; [ elif list; then list; ] [ else list;] fi if [[ -f ~/my_file ]] then echo my_file finns! else echo my_file finns inte! fi if [[ 4 -eq 5 ]] then echo "Något är väldigt fel" fi for file in $(ls) do echo $file done 8

Variabler Skapas likt python: var = värde Åtkomst med $: $var eller ${var} Det finns fler inbyggda variabler, t.ex. $HOME Path till hemkatalogen $EDITOR Default-editor för systemet (sätt till emacs ) $LANG Systemets språk (locale) $PATH En lista på mappar som används vid sökning av program $PS1 Bestämmer hur promten ser ut (senare) $PWD Nuvarande mapp $RANDOM Ger ett slumptal $TMPDIR Systemets tempkatalog (ofta /tmp) 9

Fält (array) BASH har endimensionella fält. Skapas enligt var[index] = värde Index ska vara ett heltalsvärde (0 och uppåt) Tilldelning kan också ske enligt var=(värde1, värde2,, värden) Åtkomst sker med ${var[index]} För att komma åt alla värden som en lista kan man använda * eller @ som index 10

Utvidgning (expansion) Inmatade ord utvidgas på sju olika sätt; Brace expansion Ett sätt att generera strängar. a{b,d,f}e => abe ade afe a{b..d}e => abe ace ade Kan nästlas Tilde expansion cp {orginal,kopia}.py cp min_fil.{py,py_bak} echo ~ => /home/eriel echo ~torjo => /home/torjo Om ett ord inleds med tilde (~) anses alla tecken fram till första / vara ett tilde-prefix. Om prefixet är noll tecken långt byts tilde-tecknet ut mot $HOME annars byts det ut mot hemkatalogen för användaren som motsvarar prefixet. Om det inte finns någon användare med det namnet lämnas ordet oförändrat 11

Utvidgning (expansion) Parameter expansion $parameter byts ut mot dess värde. Kan skrivas ${parameter} för att göra det tydligare Det finns flera varianter, t.ex; ${par:-word} Använd word om par inte är satt ${par:offset[:length]} Ta fram en delsträng av $par från tecken offset till slutet av strängen, dock max length tecken. Command substitution $(kommando) eller kommando kör kommando och byts ut mot resultatet av körningen. var= Eric echo $vars => echo ${var}s => Erics echo ${var:2} => ic echo ${var:0:2} => Er for file file in $(ls) in $(ls) do echo $file done 12

Utvidgning (expansion) Arithmetic expansion $((uttryck)) beräknar uttryck och byts ut mot resultatet av beräkningen. Går att använda samma artimetiska och logiska operatorer som i C. var=5 echo $(($var+6)) => 11 echo $((var++)) => 5 echo ${var} => 6 echo $((++var)) => 7 Process substitution <(list) och >(list) skapar temporära filer med utskrift respektive indata till kommandot list Word splitting De ord som finns kvar efter ovanstående steg delas vid förekomst av vita tecken echo <(echo "hej") /dev/fd/63 cat <(echo "hej") <(echo "du") hej du Pathname expansion Varje ord som innehåller tecknen *,? och [ anses vara ett mönster och byts ut mot en alfabetiskt sorterad lista av ord som matchar 13

Mönstermatchning Om ett mönster hittats matchas det enligt följande regler * => Noll eller flera tecken? => Ett tecken [ ] => Ett av de tecken som innesluts av [ och ] Sammansatta mönster Flera mönster kan slås samman med *(pattern) Noll eller flera förekomster av pattern?(pattern) Noll eller en förekomst av pattern +(pattern) En eller flera förekomster av pattern @(pattern-list) Endast ett av de givna mönstren!(pattern) Allt utom pattern Övriga tecken matchas endast mot sig själv 14

Omdirigering Istället för att läsa och skriva från terminalen kan det ske med hjälp av filer. Med operatorn > skickas utskriften till en fil och med < läses en fil istället för användarinmatning ls > files.txt my_program < indata Man kan även använda omdirigering för att få felmeddelanden (stderr) på fil my_program 2> errors > output > skriver över gammalt innehåll, >> lägger till i slutet av filen my_program >> output.log 15

Alias Med hjälp av alias kan man få BASH att byta ut ett ord mot ett annat ord alias ls='ls -l' unalias ls Bra att ha för jobbiga kommandon men oftast bättre med en funktion 16

Funktioner [function] name() sammansatt-uttryck Definierar funktionen name. Om man vill kan antingen det reserverade ordet function eller parenteserna utelämnas Funktioner anropas som vanliga kommandon Variabler delas helt mellan funktioner och anroparen. Detta kan ändras genom användning av local Endast positionella parametrar, åtkomst via $parameternummer med start från 1. I $# lagras antal parametrar. Alla parametrar kan kommas åt med $@ function fun() { a=4; } fun echo $a b=6 function fun2() { local b b=5 } fun2 echo $b 17

Funktioner function fun() { for p in "$@" do echo $p done } fun hej du hej du fun hej du hej du 18

Promten Bash kan visa användaren lite information om den körs interaktivt Om bash är redo att ta emot kommandon visas $PS1. $PS2 visas när mer inmatning krävs Variablerna kan innehålla ett flertal specialtecken, tex. \h Datornamn \w Namnet på nuvarande mapp (full path) \u Användarnamn \! Kommandots historiknummer 19

Job Med job control menas möjligheten att stoppa en process för att senare återuppta det. Bash kopplar ett job med varje pipeline Med hjälp av Ctrl-Z sätts en process i vila och bash fortsätter. Ctrl- Y sätter processen i vila vid nästa inläsningsoperation Bra kommandon i samband med job control: jobs Listar aktuella jobs (åtkomst till job med %n) bg [%n] Kör jobb nummer n i bakgrunden (egen process) fg [%n] Återta job n i denna process ( låser bash) kill [pid] [jobid] Stäng ner process pid eller job jobid 20

Historik Som standard sparas alla kommandon till filen $HISTFILE (~/.bash_history) vid avslutad session För att återupprepa ett tidigare kommando kan man använda!;!n Kör kommando nummer n!-n Kör det n:e föregående kommandot!! Kör föregående kommando (samma som!-1)!string Kör det senast förekommande kommandot som börjar med string!?string[?] Kör det senast förekommande kommandot som innehåller string 21

Inbyggda kommandon source filnamn Kör varje rad i filen filnamn cd, pwd, mkdir (se stone!) echo Skriv ut värden export [name] Se till att variabeln name finns tillgänglig utanför nuvarande miljö fc [first] [last] Kopiera kommando [first, last] från historiken till din editor. När du avslutar körs de kommandona pushd [dir] Gå till mapp dir men spara nuvarande position, popd går tillbaka 22

www.liu.se