Shell scriptek

Különböző Linux shell scriptek

A SHELL signalok ereje videóban, mellékelt forráskóddal

Borítókép címmel és súlyzós ember alakkal a pixabay-ről, PowerPoint-tal generálva.

Az előző alkalommal végigjártuk a konfigurációs fájlok újratöltésének módját SHELL szkriptekben, amihez a HUP signalt használtuk, de ennél sokkal több signal létezik. A videóbann bemutatok néhányat, amit talán még nem is hallottál, valamint arra is látsz majd példát, hogyan lehet az egyik processzből továbbítani egy másik felé a jeleket. Ez felhasználható arrra is, hogy egy több processzt indító szkript a leszármazottakat is leállítsa megfelelően, vagy éppen a leszármazottak jelezzenek a szülőnek, hogy már leállhat ő is.

Megosztás/Mentés

Konfigurációs fájl újratöltése SHELL-ben a program leállítása nélkül

Borítókép címmel és pingvin képpel PowerPoint-tal generálva.

Korábban megmutattam, hogy tölti újra az NginX proxy a konfigurációs fájlt, miután a docker-gen újragenerálta. Ezt a módszert saját szkripteknél is lehet alkalmazni, de a használt parancs nem működik automatikusan, hanem az egyes programoknak maguknak kell lekezelni, hogy mit kezdenek a nekik küldött utasítással. Utasítások alatt pedig most a signalokat, magyarul jeleket értjük, amikből több is létezik, most viszont kifejezetten arra fogunk koncentrálni, amit a háttérben futó démon programoknál jellemzően a konfigurációs fájl újratöltésére használunk. A videóban megmutatom, hogyan tudsz saját szkriptet írni, ami menet közben képes utasításra leálllás nélkül változtatni a beállításain.

Megosztás/Mentés

Egész szám növelése, csökkentése Bash ciklusban

Gondolkodó ember árny a piyabay.com-ról + hozzáadott gondolat

Egész szám használata ciklusváltozóként sok programnyelvben gyakori, de minden programnyelven egy kicsit másképp történhet és más buktatói lehetnek. Ebben a rövid cikkben egy olyan, Bash-ben felmerülő buktatóról írok, amit talán még te sem ismertél. Tudtad-e például, hogy egy egyszerű inkrementálás vagy dekrementálás a szkript leállását okozhatja? Mondtam én...

Megosztás/Mentés

Bash aliasok és változókkal, függvényekkel helyettesítésük

Laptop billentyűzet képe a pixabay.com-ról

A korábbi cikkekben előkerültek már a függvények, amikkel egy fájlon belül is önálló egységekre bonthatók a nagyobb szkriptek, illetve egyfajta függvénykönyvtárként bárki számára átadhatók. Ez nagyon jó, de néha talán feleslegesnek tűnik egy egyszerűbb feladatra. Ilyenkor jöhetnek jól az álnevek, avagy aliasok. Más részt viszont az alias sem való mindenre és nem is minden esetben alternatíva függvényre vagy változóra. Ebben a cikkben megmutatom mindhárom előnyét, hátrányát, hogy mindig a legmegfelelőbbet választhasd.

Megosztás/Mentés

Bash függvények sudo-val

Testépítű pingvin képe a pixabay.com-ról

Ha Linuxon szeretnél adminisztrátori jogosultsággal futtatni utasításokat, gyakran egy nem adminisztrátor felhasználóval lépsz be, majd a sudo paranccsal szerzel az adott utasítás futtatásának idejére adminisztrátori jogosultságot, avagy root jogot. Ugyancsak gyakori, hogy egy program elég nagyra nő, hogy a sok-sok shell script mellett, azokban függvényeket is írsz. A nagy kérdés, hogy mi van, ha ezek közül az egyik függvénynek adminisztrátori jogokkal kell működnie, de az azt meghívó szkriptnek nem. Egy részt, talán itt az ideje újratervezni, de talán megvan az okod rá és kioktatás helyett okításra van szükséged, ezért a következőkben megosztok veled pár lehetőséget. Az alábbiak megértéséhez érdemes elolvasni a Bash argumentumok és titkaik című cikket is.

Megosztás/Mentés

Bash argumentumok és titkaik

Bash terminál képe a pixabay.com-ról

A Bash egy népszerű Linux shell, amit ugyan kényelmi szempontból sokan leváltanak a termináljukban egy másfajta alapértelmezett shellre, például Z shellre, de a szkriptek továbbra is Bash-hez készülnek. Van egy-két sajátossága a Bash-nek, de az olyan alap funkció, mint az argumentumok átadásának működése néha úgy tűnik, kevés figyelmet kap, hiszen más shellekben is hasonlóan működik, nincsen benne semmi különleges. De vajon valóban így van? Ki mered jelenteni, hogy mindent tudsz róluk? Ha igen, a cikk talán nem neked készült. Régóta írok Bash szkripteket is, de mégis volt, aminek én sem voltam teljesen tudatában. Olvasd tovább a cikket és teszteld le a saját tudásodat is.

Megosztás/Mentés

Egyszerű, közös indítószkript több programverzióhoz

Mivel az eddigiekben több program több verziójának telepítését mutattam be, ezeket nem tartottam volna jónak egyszerre automatikusan indítani a rendszer betöltésével. Így az ehhez szükséges lépéseket kihagytam. Mégis jó volna egy megoldás, amivel rövidebb utasítással és könnyebben lehetne elindítani az FPM-et, Apache HTTPD-t és MySQL-t. Bár így is kézzel kell indítani és leállítani őket, sokkal egyszerűbben. Ezt fogom most bemutatni.

Megosztás/Mentés

Páros sorok megfordítása fájlban bash scripttel

Minek irkálok ilyen scripteket? Ez speciel egyetemi szorgalmi feladat volt, s ha már megírtam ne vesszen el szegény.

A Script:

if [ ! -f $1 ];
then
        echo "Első paraméter hiányzik, vagy nem létezik a fájl!"
        exit 1
fi
if [ $# -lt 2 ];
then
        echo "Második paraméter hiányzik"
        exit 1
fi

num=`wc -l $1 | cut -d" " -f1`
ret=();
i=0;
while  [ $num -gt 0 ];
do
        tmp=`tail -n ${num} $1 | head -n1`
        b=$((num % 2))
        if [ $b -eq 0 ];
        then
                ret[$i]=`echo $tmp | rev`
        else
                ret[$i]=`echo $tmp`
        fi
        let i++
        num=$((num-1))
done;
num=$i
while [ $i -gt 0 ];
do
        index=$((num-i))
        if [ $index -gt 0 ];
        then
                echo "${ret[$index]}" >> $2
        else
                echo "${ret[$index]}" > $2
        fi
        let i--
done;

Használata:
Mentsd el "rev.sh" néven, majd futtasd terminálban:

./rev.sh ./src.txt ./dst.txt

Ahol az src.txt a fájl, amiből olvas, és a dst.txt a fájl, amibe visszaírja az eredményt. Minden második sorát az src.txt -nek megfordítja és úgy írja be a dst.txt-be az src.txt tartalmát. A két fájl neve meg is egyezhet.

Megosztás/Mentés

Fájlok átnevezése kisbetűsre linuxon (rekurzív bash script)

Minden különleges idegen karaktert nem ismer, de a rename hívás után megadható a többi karakter mintájára új is.

#!/bin/bash

if [ $# -lt 1 ];
then
        echo "Add meg a mappa útvonalát!";
        exit 1
fi

function getftype()
{
        str=`ls -dl "$1"`
        echo ${str:0:1}
}

function tolowercase()
{
        cd "$1"
        for i in *
        do
                ftype=`getftype "$i"`
                if [ "$ftype" == "d" ];
                then
                        tolowercase "`pwd`/$i"
                fi
        done;
        rename 'y/A-ZÁÉÍÓÖŐÚÜŰ/a-záéíóöőúüű/' *
        cd ..
}

cd "$1"
tolowercase "`pwd`"

Használata:
Másold a fenti forráskódot egy tolcdc.sh ( to lowercase directory content ) nevű fájlba, majd futtasd terminálban a következőképpen.

./tolcdc.sh ./mappautvonala

Ahol a ./mappautvonala annak a mappának az útvonala, amiben rekurzívan szeretnéd átnevezni a a fájlokat, mappákat kisbetűsre.

Megosztás/Mentés