5 exempel på bashskript som hjälper dig att lära dig Linux-programmering

Bash scripting är ett av de mest populära, tillgängliga sätten att programmera din Linux-dator. Dessa enkla skriptexempel hjälper dig att förstå processen och introducera dig till grunderna i Bash-programmering.

1. Hur man skriver ut Hello World i Bash

Hello World-exemplet är ett utmärkt sätt att lära sig om vilket programmeringsspråk som helst, och Bash är inget undantag.

Så här skriver du ut ”Hello World” med Bash:

  • Öppna en textredigerare och börja redigera en ny fil som innehåller följande kodrader.
  • Den första raden av dina Bash-skript ska alltid se ut så här:
     #!/bin/bash 

    Shebang-kommandot (#!/bin/bash) är viktigt eftersom skalet använder det för att bestämma hur skriptet ska köras. I det här fallet använder den Bash-tolken.

  • Varje rad som börjar med #-symbolen är en kommentar. Shebang-linjen är ett specialfall, men du kan använda dina egna kommentarer för att förklara din kod. Lägg till en kommentar på rad 2, t.ex.:
      
  • Du kan skriva ut till standardutdata med hjälp av kommandot eko, följt av värdet du vill skriva ut. Lägg till följande på rad 3:
     echo "Hello World" 
  • Spara skriptet, gärna med tillägget .sh, t.ex. hello_world.sh. Tillägget är inget krav, men det är en konvention som är bra att hålla sig till.
  • För att köra ditt skript, gör filen körbar. Använd kommandot chmod (”change mode”) tillsammans med +x (”körbart”) argument och namnet på ditt skalskript:
     chmod +x hello_world.sh 
  • Använd det här kommandot för att köra skriptet från dess katalog:
     ./hello_world.sh 
  • När skriptet körs kommer det att skriva ut texten ”Hello World” till din terminal:
  • 2. Skapa en katalog genom att läsa indata

    Från dina skript kan du köra alla program som du normalt kan köra på kommandoraden. Du kan till exempel skapa en ny katalog från ditt skript med kommandot mkdir.

  • Börja med samma shebang-linje som tidigare:
     #!/bin/bash 
  • Fråga användaren om ett katalognamn med hjälp av ekokommandot som tidigare:
     echo "Enter new directory name:" 
  • Använd det inbyggda läskommandot för att hämta användarinmatning. Det enda argumentet namnger en variabel som skalet kommer att lagra indata i:
     read newdir 
  • När du behöver använda värdet lagrat i en variabel, prefix dess namn med en dollarsymbol ($). Du kan skicka innehållet i indatavariabeln som ett argument till kommandot mkdir för att skapa en ny katalog:
     mkdir $newdir 
  • När du kör det här skriptet kommer det att uppmana dig att skriva in. Ange ett giltigt katalognamn så ser du att skriptet skapar det i din nuvarande katalog:
  • 3. Skapa en katalog med kommandoradsargument

    Som ett alternativ till att läsa indata interaktivt, stöder de flesta Linux-kommandon argument. Du kan ange ett argument när du kör ett program för att kontrollera dess beteende.

    I ditt skript kan du använda $1 för att referera till en speciell variabel som innehåller värdet av det första argumentet. $2 kommer att hänvisa till det andra argumentet, och så vidare.

  • Skapa en katalog med kommandot mkdir från föregående exempel. Men den här gången använder du den inbyggda variabeln $1:
     #!/bin/bash
    mkdir $1
  • Kör skriptet och skicka den här gången ditt valda namn på en ny katalog som ett argument:
     ./arg_dir.sh Test 
  • Du kanske undrar vad som händer om du kör skriptet utan att ange ett argument alls. Prova och se; du bör få ett felmeddelande som startar ”användning: mkdir”:

    Utan några kommandoradsargument kommer värdet på $1 att vara tomt. När ditt skript anropar mkdir kommer det inte att skicka ett argument till det, och kommandot mkdir returnerar det felet. För att undvika detta kan du själv kontrollera tillståndet och presentera ett mer vänligt fel:

  • Som alltid, börja med shebang-raden:
     #!/bin/bash 
  • Innan du anropar mkdir, leta efter ett tomt första argument (dvs inga argument). Du kan göra detta med Bashs if-sats som kör kod baserat på ett villkor:
     if ["$1" = ""]; then 
  • Om det första argumentet är tomt, skriv ut ett felmeddelande och avsluta ditt skript:
         echo "Please provide a new directory name as the first argument"
        exit
  • Det lite konstiga ”fi”-nyckelordet (”if” omvänt) signalerar slutet på en if-sats i Bash:
     fi 
  • Ditt skript kan nu fortsätta som tidigare för att hantera fallet när ett argument finns:
     mkdir $1 
  • När du kör den här nya versionen av skriptet får du ett meddelande om du glömmer att inkludera ett argument:

    4. Ta bort en fil med en bash-funktion

    Om du märker att du upprepar samma kod, överväg att slå in den i en funktion. Du kan sedan anropa den funktionen när du behöver.

    Här är ett exempel på en funktion som tar bort en given fil.

  • Börja med shebang-linjen:
     #!/bin/bash 
  • Definiera en funktion genom att skriva dess namn följt av tomma parenteser och kommandon inom parenteser:
     del_file() {
        echo "deleting $1"
        rm $1
    }

    Du kan sedan anropa funktionen och ge den namnet på en fil som ska raderas:

     del_file test.txt 

  • När du anropar en funktion kommer den att ställa in den speciella $? värde med utgångsstatus för det senaste kommandot det körs. Utgångsstatusen är användbar för felkontroll; i det här exemplet kan du testa om kommandot rm lyckades:

     if [ $? -ne 0 ]; then
        echo "Sorry, could not delete the file"
    fi

    5. Skapa en grundläggande kalkylator för aritmetiska beräkningar

    Detta sista exempel visar en mycket grundläggande miniräknare. När du kör det anger du två värden och väljer sedan en aritmetisk operation att utföra på dem.

    Här är koden för calc.sh:

     #!/bin/bash


    echo "Enter first number: "
    read a

    echo "Enter second number: "
    read b


    echo "Enter Arithmetic Operation Choice :"
    echo "1. Addition"
    echo "2. Subtraction"
    echo "3. Multiplication"
    echo "4. Division"
    read choice


    case $choice in
      1)
     result=`echo $a + $b | bc`
      ;;

      2)
     result=`echo $a - $b | bc`
     ;;

      3)
     result=`echo $a \* $b | bc`
      ;;

      4)
     result=`echo "scale=2; $a / $b" | bc`
      ;;
    esac

    echo "Result: $result"

    Notera användningen av case … esac som är Bashs motsvarighet till switch-satsen från andra språk. Det låter dig testa ett värde – i det här fallet valvariabeln – mot flera fasta värden och köra tillhörande kod.

    Detta skript använder bc-kommandot för att utföra varje beräkning.