Shellscripting I. Innhold



Like dokumenter
Lynkurs i shellprogrammering under Linux

Betinget eksekvering og logiske tester i shell

Løsningsforslag til eksamen 24. november 2015

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

Øvingsforelesning i Python (TDT4110)

Introduksjon til beslutningsstrukturer

Verdier, variabler og forms

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

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

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

Kanter, kanter, mange mangekanter

INF109 - Uke 1b

Kapittel 3: Litt om representasjon av tall

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Shellprogrammer og -variabler

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

Operativsystemer og nettverk Løsningsforslag til eksamen Oppgave 1. a) Linux-kommando: java Beregn & b) Shellprogram:

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Filterprogrammer og redirigering av I/O

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Læringsmål og pensum. v=nkiu9yen5nc

Løse reelle problemer

Øving 0 - Xcode TDT4102

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

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

Filterprogrammer og redirigering av I/O

Leksjon 3. Kontrollstrukturer

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Gangemesteren Nybegynner Scratch PDF

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

HØGSKOLEN I SØR-TRØNDELAG

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Ny EKSAMEN. Operativsystemer og nettverk

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Filer og kataloger, prosesser og jobber

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Oppgave 1 - Java og prosesser (20%)

Det er frivillig å delta i spørreundersøkelsen, ingen skal vite hvem som svarer hva, og derfor skal du ikke skrive navnet ditt på skjemaet.

Repetisjon Novice Videregående Python PDF

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

Kom i gang med Stata for Windows på UiO - hurtigstart for begynnere

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

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

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

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Klask-en-Muldvarp. Steg 1: Gjøre klart spillbrettet. Sjekkliste. Introduksjon

Hvordan du kommer i gang med LOGO.

16 Programmere TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

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

MAT1030 Diskret matematikk

HØGSKOLEN I SØR-TRØNDELAG

Straffespark Introduksjon Scratch Lærerveiledning

Øvingsforelesning i Python (TDT4110)

MAT1030 Plenumsregning 1

Mattespill Nybegynner Python PDF

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

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Opphavsrett: Forfatter og Stiftelsen TISIP

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Skilpaddefraktaler Erfaren Python PDF

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

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

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

$ls -l $grep -i Olsen adresseliste.txt less #!/bin/sh $echo `ls` $chmod 755. Praktisk Linux. Grunnleggende skall kommandoer. Irene Ludvigsen Husa

Dokumentasjon av Installasjon

Foreldreveileder i hvordan lære å lese og å oppnå bedre leseflyt med «Tempolex bedre lesing 4.0», veilederversjon 1.0

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Skilpadder hele veien ned

MAT1030 Diskret Matematikk

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

ADDISJON FRA A TIL Å

2 Grafisk grensesnitt 1

FRC-Feeder-E. Et sikkert og raskt verktøy for overføring av data til File Record Converter Versjon 1.9

: subs x = 2, f n x end do

Kort oversikt over. eksport-/import-programmet for. WinMed

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

Enarmet banditt Nybegynner Scratch Lærerveiledning

Tallinjen FRA A TIL Å

Oppgradering av Handyman til siste tilgjengelige versjon

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

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

Transkript:

Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Shellscripting I Tor Halsan 19.08.2010 Lærestoffet er utviklet for faget LN199D Scripting av Servere Resymé: Leksjonen er første innføring i shellscripting. Vi tar for oss hvorfor vi scripter og hvordan vi skriver scriptet. Så blir vi introdusert for sentrale begrep som variabler, parameter og kontrollstrukture Innhold 1 Shellscripting I 2 1.1 Introduksjon...................................... 2 1.2 Hva er et shellscript?................................. 2 1.3 Hvorfor skrive script?................................. 3 1.4 Hvordan skrive et script................................ 3 1.4.1 Eksempel på skriving av script med vim................... 3 1.5 Variabler........................................ 4 1.6 Parameter inn til scriptet............................... 4 1.7 Kontrollstrukturer................................... 5 1.7.1 If setninger.................................. 5 1.7.2 case...................................... 6 1.8 Logiske operatører.................................. 7 1.9 Oppsummering.................................... 7

1 Shellscripting I 1.1 Introduksjon Scripting er et meget viktig verktøy for en systemadministrator. En hver som drifter et *NIX-basert system vil forenkle mange av sine oppgaver vha. script, samt løse andre oppgaver som ikke enkelt lar seg løse direkte. Scriptene man lager kan enten kjøres manuelt eller automatisert ved bestemte tidsrom / intervall (dette er en såkalt cronjob). Hvis man ser etter vil man oppdage at flere av de kommandoene en kjører til daglig i Linux faktisk er script. Forhåpentligvis vil dette kurset gjøre dere i stand til å både skjønne disse scriptene og lage egne. Det forutsettes her at man har kjennskap til praktisk bruk av Linux og kommandoskallet fra før i dette faget. De ulike kommandoer vil bare i liten grad bli forklart, da det forutsettes at man kjenner disse fra før. Kommer dere over kommandoer som er ukjente og ikke forklart her, man dere benytte Linux innebygde manualsystem for å lære mer om disse (man kommando) 1.2 Hva er et shellscript? Et shellscript kan vi si er en samling med kommandoer samlet i en fil. Denne filen tolkes av kommandoskallet. Et script er derfor ikke et kompilert program. Vi skal nå se mer på bestanddelene i et script. Dette gjør vi ved å se på et enkelt eksempel:!/bin/bash Enkelt script gir oss antallet unike brukere som er logget på systemet. Tor Halsan, 2008-11-21 ANTALLBRUKERE= who cut -d " " -f 1 uniq wc -l echo -e "Det er $ANTALLBRUKERE unik(e) bruker(e) logget på date " Dette enkle scriptet består av 3 deler: Første linje viser hvilket program som skal tolke scriptet, i dette tilfellet kommandoskallet bash Deretter følger linjer med kommentarer. Dette er et viktig element i scriptet vårt, da dette gjør det lettere for andre å lese det, samt at man her kan ta med en rekke opplysninger som kan være viktige for fremtidige brukere. Gjør det til en vane fra første stund å skrive slike kommentarer!

Hvorfor skrive script? side 3 av 7 Til sist har vi to linjer med selve kommandoene. Selv om man kan si at et shellscript består av kommandoer skrevet i den rekkefølge man vi ha dem utført, kan et shellscript inneholde mange elementer vi kjenner igjen fra mer avanserte programmeringsspråk. Et slikt script kan inneholde blant annet løkker, kontrollstrukturer, funksjoner og interaktivitet. Vi skal gå gjennom alt dette i dette kurset. 1.3 Hvorfor skrive script? Scriptene er vår venn, å skrive script blir fort en viktig del av systemadministrators hverdag. Noen script skriver vi for å lette en jobb vi gjør ofte, mens andre skriver vi gjerne for at de skal kjøres jevnlig automatisk som nevnt i introduksjonen. Dette kan være ryddejobber, egne overvåkningsrutiner og periodisk vedlikehold av tjenester som går på tjeneren. 1.4 Hvordan skrive et script Å skrive selve scriptene er enkelt. Man bruker sin favoritteditor og skriver dette som en tekstfil. Jeg anbefaler at dere benytter en teksteditor som kan kjøres i enten i et terminalvindu eller direkte på konsollet, ikke en grafisk editor. Gode eksempler på slike editorer er vim og emacs. Grunnen til dette er at i stort sett alle tilfeller vil logge seg på en tjener via SSH og skrive script på en annen maskin fra sin egen maskin som er plassert utenfor maskinrommet. Jeg vil benytte editoren vim i dette eksemplet, men dere står selvsagt fritt til å selv velge en annen. vim har en innebygget opplæringsfunksjon for den som ikke kjenner programmet, det er bare å skrive kommandoen vimtutor for å starte opplæringen. Ved å editere filen /etc/vim/vimrc (eller legge en fil med tilsvarende innhold i hjemmekatalogen, ~/.vimrc, som overstyrer denne) kan man aktivisere en del nyttige funksjoner. Man kan fjerne kommenteringen av funksjonen «syntax on» for å få fargemerking av kode. Benyttes terminal med svart bakgrunn bør også «background=dark» aktiviseres. Finn gjerne ut av flere funksjoner selv. 1.4.1 Eksempel på skriving av script med vim Naviger til ønsket katalog på maskinen, for eksempel: cd ~/sas/script Start vim med ønsket fil: vim script1 trykk på tasten i (for å komme i insertmodus) og skriv inn selve innholdet. Tast Esc for å komme ut av insertmodus og skriv :x for å lagre og avslutte i en og samme operasjon. (:x tilsvarer :wq, altså Write og Quit) Gjør scriptet kjørbart:

side 4 av 7 Shellscripting I chmod +x script1 Test scriptet:./script1 1.5 Variabler I slike script vil variabler være viktig. Vi har allerede sett et eksempel på bruk av variabler i det første scriptet. Det er i slike script vanlig skikk å bruke store bokstaver, det gjør scriptene mer lettleste og variablene kan ikke forveksles med kommandoer. Variabler i shellscript deklareres ikke på forhånd slik som en er vant til fra rene programmeringsspråk. En variabel tilordnes en verdi med likhetstegn: VARIABEL1=432 VARIABEL2="Dette er tekst" VARIABEL3= date VARABEL4=$(date) Forklaring på disse tilordningene: VARIABEL1 får tallverdien 432. Dette betyr ikke at variabelen er av datatype integer (heltall) slik en kanskje skulle tro, alle variabler blir regnet som tekst. VARIABEL2 får blir satt lik en tekststreng. Vi bruker anførselstegn her, dette er nødvendig hvis tekststrengen består av mer enn ett ord. Det er god skikk å alltid bruke anførselstegn, selv om tekststrengen skulle bestå av bare ett ord. VARIABEL3 og VARIABEL4 får verdien som kommandoen date gir oss til svar. Dette er bare to forskjellige måter å gjøre det samme på. Legg merke til typen «fnutter» vi bruker på VARIABEL3. Det er denne typen tilordning vi benyttet i det første scriptet. Når vi etter tilordning skal benytte variabelen kjennetegnes dette ved at vi setter $ foran variabelnavnet. Dette forteller kommandoskallet som tolker scriptet vårt at dette er en variabel, og at nå skal vi sette inn verdien av denne. Hvis dere har skrevet inn det første scriptet på deres egen Linuxmaskin og kjørt dette, kan dere prøve å fjerne dollartegnet og se hva dere får ut da. I vårt første eksempelscript bruker vi altså to forskjellige måter å lage dynamiske strenger. Vi ser at i strengen vi skriver tilbake til brukeren bruker vi en variabel og et kommandoresultat. Bash tolker begge deler under utførelsen, selv om strengen står i anførselstegn. 1.6 Parameter inn til scriptet Det er svært vanlig å gi parameter inn til et script. Disse finner en lett igjen da de får standard variabelnavn, 1 er første parameter, 2 andre osv. Navnet til selve scriptet er 0. Disse variablene benytter vi på vanlig måte, vi henviser til disse ved å putte dollartegn foran. Vi viser dette dette med et eksempel:

Kontrollstrukturer side 5 av 7!/bin/bash Enkelt script for å legge til en ny bruker Bruksmåte: <scriptnavn> <brukernavn> Versjon 0.1 Tor Halsan, 2008-11-21 useradd $1 Dette er ikke et særlig godt script, men vi vil utvide det senere til å bli litt mer nyttig. Et slik script av denne typen, hvor vi standardiserer input til en eksisterende kommando kalles gjerne en wrapper, vi «pakker inn» kommandoen i et script. Vi vil belyse parametrene litt mer i neste avsnitt, hvor vi utvider vårt enkle eksempelscript over. 1.7 Kontrollstrukturer Vi skal nå se på kontrollstrukturer, hvor utførelsen av scriptet vil avhenge av om gitte betingelser er oppfylt. 1.7.1 If setninger Vi starter med å se på if setninger. Disse kan variere fra det helt enkle, til mer komplekse. De vil være på formen: if <betingelse>; then <utfør A> elif <betingelse>; then <utfør B> else <utfør C> fi Merk at elif og else er valgfrie, og at vi avslutter if med fi. Vi utvider vårt eksempelscript med en slik kontrollstruktur:!/bin/bash Enkelt script for å legge til en ny bruker Bruksmåte: <scriptnavn> <brukernavn> Versjon 0.2 Tor Halsan, 2008-11-21 Sjekk om du er root if [ /usr/bin/id -u!= 0 ]; then echo -e "Du må være root for å kjøre dette scriptet" exit 1 fi useradd -m $1

side 6 av 7 Shellscripting I Nå avsluttes scriptet hvis vi ikke er root. Det er ingen vits i prøve å legge til en annen bruker uten at man har rettigheter til dette. Her introduseres vi for en annen kommando: [. Dette er egentlig kommandoen test (man test gir oversikt over syntaks). Det vil etterhvert komme fler eksempler på hvordan denne kommandoen brukes. Vi sjekker hver UID (user ID) til brukeren som kjører, og hvis denne ikke er lik 0 (roots UID) får vi melding om dette, og scriptet avsluttes med en feilkode. Et vellykket script vil returnere verdien 0 ved avslutning, mens vi returnerer andre verdier ved feil. Dette kan brukes til flere ting, slik som kjøring av andre kommandoer hvis scriptet ikke gikk som det skulle. Vi vil se eksempler på dette i avsnittet om logiske operatører. 1.7.2 case I shellscript har vi også muligheten til å bruke flervalgskontrollstrukturen case. La oss igjen belyse dette med et eksempel, vi utvider vårt enkle script til å la bruker velge gruppetilhørighet til den nye brukeren.!/bin/bash Enkelt script for å legge til en ny bruker Bruksmåte: <scriptnavn> <opsjon> <brukernavn> Versjon 0.3 Tor Halsan, 2008-11-21 Sjekk om du er root if [ /usr/bin/id -u!= 0 ]; then echo -e "Du må være root for å kjøre dette scriptet" exit 1 fi Sjekk hvilken gruppe brukeren skal tilhøre case "$1" in -a --ansatt) Dette er en ansattbruker useradd -m -d /home/ansatt/$2 -g ansatt $2 ;; -s --student) Dette er en studentbruker useradd -m -d /home/student/$2 -g student $2 ;; *) Alle andre opsjoner gir feilmelding echo -e "Ukjent opsjon" exit 1 ;; esac passwd $2

Logiske operatører side 7 av 7 Vi velger her mellom flere alternativer. Vi tenker oss at første argument inn forteller oss hvilken gruppe vi skal benytte. Vi lar også brukeren få to alternative måter å skrive inn opsjonene på, vi separer disse med tegnet (pipe). Her vil vi sjekke om første argument er lik «-a» eller «ansatt», og i tilfelle kjøre kommandoen som legger til en bruker med gruppetilhørighet til ansatte. Etter at denne kommandoen er utført har vi en linje med «;;» for å hoppe ut av kontrollstrukturen. Etter at vi har sjekket for våre godkjente opsjoner, har vi et valg som fanger opp «alt annet». Slik kan vi varsle brukeren om dette, og stoppe scriptet med en feilkode. 1.8 Logiske operatører Vi har også til disposisjon noen logiske operatører. Operatøren og skrives && og operatøren eller er. Disse kan brukes i samband med avslutningskodene som nevnt i forrige avsnitt. Vi kan tenke oss at dersom en kommando kjøres uten feil skal en ny kommando kjøres. Vi kan bruke kommandoen useradd som eksempel siden denne er brukt i våre eksempelscript. I forskjell fra kommandoen adduser opprettes her kun en bruker, uten at vi mulighet til å oppgi passord interaktivt. La oss tenke oss at vi vil sette passord hvis brukeren ble lagt til uten feil. Da kan vi skrive inn kommandoen useradd test && passwd test Her vil passordkommandoen kun bli kjørt hvis resultatet fra første kommando er vellykket. Tilsvarende kan vi benytte. 1.9 Oppsummering Vi har i denne leksjonen begynt å se på scripting i Linux. Vi har sett på hva et script er, litt om hvorfor vi skriver script og hvordan. Vi har startet med å se på den enkleste formen for scripting, shellscript. Dette fordi den enkleste formen for script er den det gjerne er lettest å ty til når når en trenger et script i en fei. Vi har sett på det grunnleggende; variabler og parametre. Videre har vi begynt å få en struktur over scriptene våre i og med at vi har gjennomgått kontrollstrukturer. Vi avsluttet med en rask titt på logiske operatører. Neste leksjon vil ta opp tråden med shellscripting, og vi vil bl.a. gjennomgå løkker.