Bash Script

Ubuntu

A bash egy unix rendszerhéj, amely a GNU Projekt részeként készült. A futtatható fájl neve bash egy játékos mozaikszó, mely a Bourne again illetve a born again kifejezéseket rövidíti. Ez a korai Bourne shell-re utal, melyet még 1978-ban adtak ki a Unix 7 Verzió részeként. A bash-t 9 évvel ezt követően 1987-ben készítette el Brian Fox, majd 1990-ben Chet Ramey vette át a szoftver gondozását. A legtöbb Linux rendszeren, valamint az OS X rendszereken a bash az alapértelmezett shell.

Mire jó? Megkönnyíti a felhasználók munkáját, automatizálni lehet vele folyamatokat, pl: karbantartást. Windowsban is van hasonló, ott batch-nek hívják, és .bat a futtatható fájl kiterjesztése.

Első programunk

A bash fájlok kiterjesztése .sh. Tehát egy ilyen fájlt fogunk létrehozni sima nano szövegszerkesztővel. nano elso.sh

Tartalma:

#!/bin/bash
echo „Hello World, ez az első bash programom!”

Lefuttatni a bash elso.sh utasítással lehet, vagy adni kell neki futtatási jogot: chmod a+x elso.sh és utána ./elso.sh

Az echo parancsot kiíratásra használjuk.
Komment elhelyezése: # ha egysoros, ” és ‘ ha többsoros

Második program

Hozzunk létre egy változót, ami két szám összegét tárolja, majd írassuk ki a tartalmát!

nano masodik.sh

#!/bin/bash
# Két szám összeadása
((osszeg=25+35))
#Eredmény kiíratása
echo $osszeg

Futtatás: bash masodik.sh

While ciklus

While ciklus segítségével számoljunk el 5-ig! A szamlalo nevű változó értékét növeljük mindig eggyel, amíg <=5 Ha eléri az értéke az 5-öt, akkor ki fog lépni a program a while ciklusból.

#!/bin/bash
ervenyes=true
szamlalo=1
while [ $ervenyes ]
do
echo $szamlalo
if [ $szamlalo -eq 5 ];
then
break
fi
((szamlalo++))
done

FOR ciklus

Számoljunk 1-től 5-ig!

#!/bin/bash
for (( szamlalo=1; szamlalo<=5; szamlalo++ ))
do
echo -n "$szamlalo "
done
printf "\n"

Számoljunk 10-től 1-ig vissza!

#!/bin/bash
for (( szamlalo=10; szamlalo>0; szamlalo-- ))
do
echo -n "$szamlalo "
done
printf "\n"

Adatok bekérése, read

Üdvözöljük a felhasználót, kérjük be a nevét egy változóba!

#!/bin/bash
echo "Enter Your Name"
read name
echo "Welcome $name to LinuxHint"

Kérjük be egy téglalap két oldalának hosszát, majd számoljuk ki a kerületét, területét!

#!/bin/bash
echo "A téglalap a oldala:"
read a
echo "A téglalap b oldala:"
read b
((terulet=a*b))
((kerulet=(a+b)*2))
echo "A téglalap területe $terulet"
echo "A téglalap kerülete $kerulet"

IF és ELSE IF, feltételek kezelése

Feltételnél if-fel kezdünk és fi-vel jelezzük a végét.  Operátorok:
-eq’ for equality, ‘ (egyenlő)
-ne’ for not equality and ‘ (nem egyenlő)
-gt’ for greater than  (nagyobb, mint…)
-lt’ for less then (kisebb, mint…)

Lehet használni itt is ÉS, VAGY operátorokat is. ( &&, ||) Szöveges adatok esetén ha egyezőséget vizsgálunk, akkor ==, ha nem egyenlő akkor !=

#!/bin/bash
echo "Adj meg egy számot 0 és 100 között!"
read n
if [ $n -lt 10 ];
then
echo "Az adott szám egy számjegyből áll."
else
echo "Az adott szám több számjegyből áll."
fi

Természetesen használhatjuk a jól megszokott relációs jeleket is, de ebben az esetben (( )) közé kell írni a feltételeket!

Hány számjegyű a szám?
((n=107))
if (( $n < 10 ));
then
echo "egy számjegyű"
elif (( $n <= 99 ));
then
echo "két számjegyű"
else
echo "több mint 2 számjegyű"
fi

Szöveges adatok vizsgálata

!/bin/bash
echo "Enter username"
read username
echo "Enter password"
read password
if [[ ( $username == "admin" && $password == "secret" ) ]]then
echo "valid user"
else
echo "invalid user"
fi

ELSE IF, azaz elif

Melyik érdemjegynek mi a neve? Kérjünk be egy számot, és írjuk ki, hogy nevezik.

#!/bin/bash
echo "Add meg az érdemjegyet"
read n
if [ $n -eq 1 ];
then
echo "elégtelen"
elif [ $n -eq 2 ];
then
echo "elégséges"
elif [ $n -eq 3 ];
then
echo "közepes"
elif [ $n -eq 4 ];
then
echo "jó"
elif [ $n -eq 5 ];
then
echo "jeles"

else
echo "Csak 1-től 5-ig vannak az osztályzatok!"

Hozzunk létre egy új könyvtárat, ha még nem létezik…

echo "Az új könyvtár neve"
read ndir
if [ -d "$ndir" ]
then
echo "Már van ilyen könyvtár"
else
`mkdir $ndir`
echo "Könyvtár létrehozva :) "
fi

Vizsgáljuk meg, a megadott nevű fájl létezik-e?

filename=$1
if [ -f "$filename" ]then
echo "Igen, létezik"
else
echo "Nincs ilyen fájl az aktuális mappában!"
fi

CASE Természetesen itt is van CASE, hasonlóan működik, mint a többi programozási nyelvben. case-zel kezdődik, és easc-kal jelezzük a végét. A feladat ugyanaz, mint az előbb, adjuk meg, melyik osztályzatnak mi a neve!

#!/bin/bash

echo "Add meg az érdemjegyet"
read n
case $n in
1)
echo echo "Elégtelen" ;;
2)
echo "elégséges" ;;
3)
echo "közepes" ;;
4)
echo "jó" ;;
5)
echo "jeles" ;;
*)
echo "1-5 közötti számot kérek!" ;;
esac

Függvények

Hozzunk létre egy saját függvényt! A függvényt a function utasítással adjuk meg, majd adunk neki egy nevet. Első függvényünk egy sima szöveg kiíratás lesz. A függvényt, hasonlóan a többi programozási nyelvhez, a nevével tudjuk meghívni (futtatni)

function Fuggvenyem()
{
echo 'Szeretem a bash programozást!'
}

Fuggvenyem

Futtatás a szokásos módon, a fájl nevével: bash fuggveny_pelda.sh. Az eredmény pedig, hogy kiírja: I like bash programming

Függvény paraméterekkel

Számoljuk ki egy téglalap területét. Ebben az esetben a függvényünk 2db paramétert fog várni, az a és a b oldal hosszát, ezek $1 és $2-vel vannak jelölve. Ezzel azt jelezzük, hogy numerikus adatot várunk a függvényünk paramétereként.

teglalap_terulete() {
terulet=$(($1 * $2))
echo "A téglalap területe : $terulet"
}

teglalap_terulete 10 20

A Bash függvények numerikus és szöveges értéket is átadhatnak. Nézzünk egy példát… Készítsünk egy függvényt, ami üdvözli a felhasználót. A felhasználótól egy nevet fogunk bekérni, ezt fogja a függvényünk felhasználni!
Hozzunk létre egy új bash fájlt: udvozlo_fuggveny.sh néven!

#!/bin/bash
function udvozles() {
str="Hello, $nev"
echo $str

}
echo "Írd be a neved!"
read nev

val=$(udvozles)
echo "A függvény visszatérési értéke: $val"

Futtassuk le a scriptet:

bash udvozlo_fuggveny.sh