bash

En gång är ingen gång, två gånger är ett skript. Så lyder ett välkänt mantra i Unixvärlden. Förutom att skapa ett snabbare arbetsflöde blir skripten också en form av dokumentation som du kan gå tillbaka till för att se hur du löste ett visst problem.

Majoriteten av alla skript börjar med #!/bin/bash. Strängen måste stå på första raden och talar om vilken tolk som ska exekvera skriptet, i vårt fall är det /bin/bash. Några exempel på andra tolkar du kan se i andra skript är #!/bin/sh, #!/usr/bin/python och #!/usr/bin/make.

För att ett skript ska kunna exekveras ska du göra det körbart genom att skriva chmod +x skript-namn. Skriptet startar du sedan genom att skriva ./skript-namn. Anledningen till att du inleder med ./ är för att tala om att skriptet befinner sig i den aktuella katalogen.

Om du vill slippa inleda med ./ kan du flytta skriptet till en sökväg som är registrerad i din PATH-variabel, till exempel /usr/local/bin. Ett annat trick är att skriva bash skript-namn.

1. Argument


Vi börjar med ett enkelt exempel som du förhoppningsvis kan ha nytta av. Låt säga att du har ett gäng virtuella maskiner i Virtualbox som du startar och stoppar med jämna mellanrum och att du vill köra dem utan något synligt gränssnitt. Att styra det från kommandoprompten fungerar utmärkt, men kommandona är långa och det är lätt hänt att du skriver fel.

Skapa skriptet vmstart, gör filen körbar med chmod +x vmstart och lägg den i katalogen /usr/local/bin. Innehållet ser ut som på bild 1.
Enklare kan det knappast bli. Om du har en virtuell maskin med namnet ”Min virtuella server” kan du nu starta den med vmstart ”Min virtuella server”. Du har ditt första användbara Bash-skript och du har redan blivit mycket mer produktiv.

Variabeln $1 betyder första argumentet efter ditt skript. Innehåller maskinnamn et blanksteg är det därför viktigt att du använder dig av citattecken. Om du hade skippat citattecken hade $1 bara resulterat i ”Min” och $2 och $3 skulle bli ”virtuella” respektive ”server”.
Ett tips när du felsöker är att skriva ut innehållet i din variabel (”eka”) på skärmen så du ser exakt vad den innehåller. Det gör du i skriptet med raden echo ”$1”, utan citattecken.



1. Argument



2. Felhantering

2. Felhantering


För att göra dina skript mer användarvänliga och förhindra katastrof om du ger fel indata eller ingen indata, är det god sed att lägga in tester som kollar om dina indata ser vettiga ut. Till din hjälp har du manualsidan för test som du får upp genom att slå in kommandot man test. Gör om skriptet så att det ser ut som på bild 2!

Nu har vi fällt in tre goda vanor. I början av skriptet sätter vi variabeln VM (Virtual Machine) till ditt argument. Det är betydligt enklare att hålla koll på vad den variabeln gör än en rad intetsägande $1 $2 $3. Längre fram när du gör mer komplierade skript med flera argument kommer du definitivt uppskatta att sätta variabelnamnen initialt. Det blir också enklare för andra att förstå vad skriptet gör.

Den andra goda vanan är att vi testar om vi har någon form av indata och kör våra kommandon enbart om vi angett ett argument. I Bash-programmering utför du den här typen av tester inom hakparanteser, men syntaxen är direkt hämtad från manualsidan ”man test”. Bash kan vara lite tjurig vad det gäller citationstecken och syntaxen är rätt strikt, så ibland kan det bli ett antal redigeringar innan du fått ditt skript att göra vad du vill. Du kan till exempel inte trycka in blanksteg hur som helst – VM=$1 är inte samma sak som VM = $1. I det senare fallet tror Bash att du försöker köra ett kommando som heter VM och du får helt fel resultat.

Den tredje goda vanan i vårt senaste skript är att vi gör någon form av återkoppling till vår användare om vi matat in fel syntax, och att vi i vårt skript brutit ut texten i en funktion, printsyntax. Funktioner är underskattade i Bash och kan användas för att skapa renare, mer läsbar kod.

Sida 1 / 4

Innehållsförteckning