Betinget eksekvering og logiske tester i shell

Like dokumenter
Lynkurs i shellprogrammering under Linux

Shellscripting I. Innhold

Operativsystemer og nettverk

Linux-programmer som bruker regulæruttrykk: grep, sed, awk

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Videregående shellprogrammering i Linux

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. if (be): else (not_to_be):

MAT1030 Plenumsregning 1

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

MAT1030 Diskret Matematikk

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

MAT1030 Diskret matematikk

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Shellprogrammer og -variabler

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Filterprogrammer og redirigering av I/O

Introduksjon til beslutningsstrukturer

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Filterprogrammer og redirigering av I/O

Videregående shellprogrammering

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Notat 2, ST januar 2005

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Når en bruker skriver sitt navn ("Ole") i et form-element med name="fornavn" som attributt. klikker på submit-knappen

Høgskoleni Østfold. Ny/utsatt EKSAMEN

Øvingsforelesning 1 Python (TDT4110)

Ny EKSAMEN. Operativsystemer og nettverk

Introduksjon til DARK assembly

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Håndtering av filer og kataloger

Oppgave 1 - Linux kommandolinje (%)

EKSAMEN. Dato: 7. desember 2016 Eksamenstid: 09:00 13:00

Dark Stakkmaskin. Aritmetiske instruksjoner

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Løsningsforslag til eksamen 24. november 2015

Læringsmål og pensum. Oversikt

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Programmering Høst 2017

Løse reelle problemer

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

Programmeringsspråket C

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INF Noen oppgaver til kap. 8

Leksjon 3. Kontrollstrukturer

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

Hangman. Level. Introduksjon

Kapittel 1 En oversikt over C-språket

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

løsningsforslag-uke5.txt

INF Noen oppgaver til kap. 8

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

1,r H øgs kolen i Østfol d

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

Oppgaver uke 1: Løsningsforslag

EKSAMEN. Operativsystemer. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

TOD063 Datastrukturer og algoritmer

Oppsummering fra sist

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

INF1000 : Forelesning 1 (del 2)

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Del 1 En oversikt over C-programmering

Filsikkerhet i Linux

Håndtering av filer og kataloger

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

Oppsummering - Kurset (10/ )

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

1. Kontrollstrukturer og løkker

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Nyttige Linux-kommandoer. Hvordan du kan jobbe mer effektivt Dag Langmyhr

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Kap. 4: Ovenfra-ned (top-down) parsering

INF 1000 høsten 2011 Uke september

Debugging. Tore Berg Hansen, TISIP

Utførelse av programmer, metoder og synlighet av variabler i JSP

Steg 1: Vår første datamaskin

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Øvingsforelesning i Python (TDT4110)

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Metoder med parametre, løkker og arrayer

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Repetisjon Novice Videregående Python PDF

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. v=nkiu9yen5nc

Del 3: Evaluere uttrykk

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Transkript:

Betinget eksekvering og logiske tester i shell

Betinget eksekvering *? Programmet utfører operasjon(er) bare hvis en logisk betingelse er sann Bash tilbyr to kontrollstrukturer for å kunne gjøre betinget eksekvering: if case Både if og case krever at vi kan gjøre logiske tester i shellet for å sjekke om noe er sant eller usant *: Kalles også for seleksjon i programkoden

Exit-status og variabelen $? For å forstå hvordan logiske tester håndteres i shellprogrammer, må vi kjenne til begrepet exit-status Alle Linux-kommandoer returnerer en exit-status når de avslutter en tallverdi som lagres i shellet Standard er at exit-status lik 0 (null) betyr alt i orden En exit-status > 0 brukes til å signalisere at noe er feil Vi kan sette exit-status for våre egne shellprogrammer med termineringskommandoen exit verdi Exit-status for siste utførte kommando ligger alltid lagret i shellet. Denne verdien kan hentes frem med $?

test Logiske tester i shellet Kommandoen test : Beregner logiske utrykk Returnerer med exit-status 0 hvis uttrykk er true Returnerer med exit-status 1 hvis uttrykk er false Syntaks: test logisk uttrykk For å få ryddigere kode, tillater Bash alternativt denne syntaksen for å kjøre kommandoen test : [ logisk uttrykk ]

Logiske uttrykk kan skrives på flere måter * 1. Uttrykket skrives inne i [] (enkle brackets): Syntaksen som er angitt i man test POSIX-standard Vi skal bare bruke denne skrivemåten 2. Uttrykket skrives inne i [[]] (doble brackets): Utvidet syntaks og funksjonalitet, med regulæruttrykk 3. Uttrykket skrives inne i (()) (doble paraneser): Egentlig beregning av aritmetiske uttrykk i Bash, som også kan beregne logiske true/false uttrykk * Læreboken viser alle tre varianter og er litt uryddig i syntaksbruken

Sammenligning og test av tekststrenger Logisk uttrykk Uttrykket er true hvis: [ s1 = s2 ] De to strengene er like [ s1!= s2 ] De to strengene ikke er like [ n s ] s har lengde større enn 0 [ s ] s har lengde større enn 0 [ z s ] s har lengde lik 0 (tom) Merk at syntaksen her er "veldig streng", det må være en space mellom uttrykk og [], og mellom operander og operatorer

Sammenligning av to tallverdier Logisk uttrykk Uttrykket er true hvis: [ n1 eq n2 ] De to tallene er like [ n1 ne n2 ] De to tallene ikke er like [ n1 gt n2 ] n1 er større enn n2 [ n1 ge n2 ] n1 er større eller lik n2 [ n1 lt n2 ] n1 er mindre enn n2 [ n1 le n2 ] n1 er mindre eller lik n2

Logiske tester knyttet til filer Kan også teste egenskaper ved filer ved å bruke logiske uttrykk og kommandoen test i Linux Nyttig for unngå run-time feil i shellprogrammer: Kan teste om filer eller kataloger finnes før vi prøver å gjøre noe med dem Kan teste om filer er av riktig type Kan sjekke om vi har rettigheter til filer før vi forsøker å lese, skrive eller eksekvere Gir også mulighet til å sammenligne metadataene for filer (tidsstempel, inodenummer etc.)

Sammenligning og testing av filer * Logisk uttrykk Uttrykket er true hvis filen: [ e fil ] Eksisterer [ f fil ] Er en vanlig (regulær) fil [ d fil ] Er en katalog [ r fil ] Er lesbar (tilsvarende for w og x ) [ O fil ] Eies av deg/bruker ( G for gruppe) [ fil1 ef fil2 ] fil1 og fil2 er samme fil (inode) [ fil1 nt fil2 ] fil1 er nyere enn fil2 [ fil1 ot fil2 ] fil1 er eldre enn fil2 *: Det finnes flere logiske operatorer for filer, se læreboken og man test

Sammensatte uttrykk: NOT, AND og OR Logisk uttrykk Uttrykket er true hvis: [! u ] Det logiske uttrykket u er false [ u1 a u2 ] Begge uttrykkene u1 og u2 er true [ u1 o u2 ] Minst ett av u1 og u2 er true ( ) Brukes til gruppering/presedens Eksempel: [! \( u1 o u2 \) a \( u3 o u4 \) ]

if - setningen Syntaks: if TEST KOMMANDO; then FLERE KOMMANDOER; fi Virkemåte: Hvis TEST KOMMANDO returnerer med exit-status lik 0, så utføres FLERE KOMMANDOER, ellers utføres de ikke

Vanlig skrivemåte for bruk av if i shellprogrammer Dropper vanligvis semikolon......skriver i stedet hver del av if - setningen på hver sin linje, med indentering for lesbarhet Bruke oftest kommandoen test, skrevet med [], som "test-kommando"...... men en hvilken som helst Linux-kommando kan brukes etter if

if eksempler Med en "vanlig" Linux-kommando i testen: if who grep q 'janh' then echo "Hacker alert!" fi Med bruk av kommandoen test, skrevet med [] : if [ $USER = 'janh' ] then echo "Hacker alert!" fi

if then elif else #!/bin/bash read p "Og De heter? " guest_name if [ $guest_name = Jan ] then echo "Hjertelig velkommen" elif [ $guest_name = Christian ] then echo "Vennligst forlat lokalet umiddelbart" exit 1 else echo "Står De på gjestelisten?" fi exit 0

Noen flere eksempler med if Skrive ut brukere med flest logins Interaktiv lesing og testing av verdier Skrive ut fil eller la bruker taste inn ny fil Bestemme det største av tre tall

case - setningen i shellprogrammer case-setningen er alternativ måte å skrive en flergrenet if-test på Hvert "case" er en liste med verdier som matches mot et gitt uttrykk For hvert "case" angis det hvilke kommandoer som skal kjøres Tilsvarende konstruksjoner finnes i svært mange programmeringsspråk, gir ofte ryddigere kode

case - syntaks case expression in list1) action(s) ;; list2) action(s) ;;... *) action(s) ;; esac Kan bruke regulæruttrykk i angivelsene av list *) angir det som utføres hvis ingen av de andre angitte case matcher expression Hvis hvert case avsluttes med ;& i stedet for ;;, vil eksekveringen fortsette med neste case, i stedet for å hoppe til esac

case - eksempel read p "Do you agree to the licensing\ terms of this program?" answer case $answer in [yy] [yy][ee][ss])./program ;; [nn] [nn][oo]) echo "I cannot run the program" exit 1 ;; *) echo "Invalid response" exit 1 ;; esac exit 0

&& og : Betinget eksekvering Kan også bruke spesialtegnene && og i Bash til å gjøre seleksjon i shellprogrammer Spesialtegnene settes mellom to kommandoer: && Utfør neste kommando bare hvis forrige OK Utfør neste kommando bare hvis forrige ikke OK "OK" betyr at kommando terminerer med exit-kode lik 0 && og er egentlig bare "forkortede if-tester"

Eksempler: Betinget eksekvering grep q Levon filnavn && echo ": )" if grep q Levon filnavn then echo ": )" fi grep q Levon filnavn echo ": (" if!grep q Levon filnavn then echo ": (" fi

Komprimering av kode med && og if [ f $filnavn ] then rm filnavn else echo "No regular file $filnavn found" exit 1 fi [ f $filnavn ] && rm $filnavn { echo "No\ regular file $filnavn found"; exit 1; }