Shell scriptek

Különböző Linux shell scriptek

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