szerverek:linux:cli:bash-szkriptek
Tartalomjegyzék
📜 Bash szkriptek
Ez egy egyszerűtől a bonyolultabbig bővülő bash szkript gyűjtemény, ihletadónak.
Futtatás:
(futtathatóvá tétel:
./szkript_neve paraméter1 paraméter2 …(futtathatóvá tétel:
chmod +x szkript_neve )
A szkripteknél ez egyszerűség miatt nem használtunk hibaellenőrzést, feltételezzük, hogy helyes adatokat kap a szkript.
ℹ️ Vegyes kiírások
Dátum kiírás
#!/bin/bash clear # törli a képernyőt date date +%Y # csak az év date +%Y-%m-%d0 # formázott dátum
Felhasználó üdvözlése
#!/bin/bash clear echo "Üdvözöllek, $USER!" # A $USER redszerváltozó tartalmazza a jelenlegi user nevét
Uptime
Mióta megy a gép? Kétféle módon is lehet kombinálni az echo-val, hogy egy sorba kerüljön a kiírás és az uptime parancs kimenete.
#!/bin/bash clear # egyik kiírás: a két parancs külön sorban van: echo -n "Üzemidő: " # -n = nincs sortörés, mellé jön a következő kimenet uptime -p # -p = pretty kapcsoló, egyszerűsített kiírás # másik kiírás: az uptime parancsot az echo-n belül is lehet futtatni $(PARANCS) echo "A rendszer üzemállapota: $(uptime)"
➕ Fájlok létrehozása
Új fájl létrehozása paraméterrel
Futtatáskor paraméterként adjuk meg a fájl nevét.
#!/bin/bash clear touch $1 ls # kilistázzuk a könyvtárat
A $1 az első paraméter, amit megadunk futtatáskor:
./02-fajl újfájl.1
Új fájl dátummal
A mai dátum lesz a fájl neve.
A ` karaktert a AltGr + 7 billentyűkkel tudod írni.
#!/bin/bash clear touch `date +%Y-%m-%d`.dat #fontos a ` karakter! ls
vagy változó használatával:
#!/bin/bash clear datum = `date +%Y-%m-%d` touch $datum.dat ls
Új fájl létrehozása interakcióval
Futtatás közben kérjük be a fájl nevét.
#!/bin/bash clear echo “add meg a fájl nevét:” read fajlnev touch $fajlnev ls -l $fajlnev # csak az új fájlt listázza ki
Új fájl létrehozása tartalommal (szkript készítő szkript)
#!/bin/bash clear read -p "Add meg az új szkript nevét: " fajlnev echo "#!/bin/bash" > $fajlnev # a > töröl minden korábbi tartalmat echo "clear" >> $fajlnev # a >> hozzáfűzi az előző tartalomhoz chmod +x $fajlnev # futtathatóvá teszi az új szkriptet nano $fajlnev # megnyitja szerkesztőben (a szkriptünk fut tovább!) # a NANO bezárása után megy tovább a szkript! clear echo “ A szkript futtatásához írd be: ./$fajlnev”
Projektmappa készítése
Létrehozunk egy projekt mappát, azon belül három almappát és egy readme fájlt.
Paraméterrel fogjuk futtani:
./new_project.sh <project_name>
#!/bin/bash mkdir -p "$1/src" "$1/docs" "$1/tests" echo “**Üdvözöl a $1 projekt!**” > "$1/README.md" echo "Project $1 létrehozva."
A readme.md fájl markdown (.md) nyelven íródik, azaz a formázást is jelöljük. Ezért az Üdvözöl a $1 projekt! félkövérre formázva jelenik meg, mint ezen az oldalon is.
↔️ Feltételek használata (if-else)
Minta if-else:
# Ez egy minta if [ feltétel ]; then # a feltétel és a zárójelek közé szóközt kell tenni! echo "Igaz a feltétel." else echo "Hamis a feltétel." fi # fi-vel zárod a logikai vizsgálatot!
Root-e vagy?
Kiírja, hogy root-ként futtatod-e a szkriptet.
Gyakorlati haszna, ha egy nagyobb szkript részeként használod, amit root-ként, vagy éppen nem root-ként kellene futtatni.
#!/bin/bash if [ "$EUID" -eq 0 ]; then # EUID = 0 -> root echo "Root jogokkal rendelkezel." else echo "Nincs root jogosultságod! Futtasd a szkriptet sudo-val." fi
Netkapcsolat ellenőrzése
#!/bin/bash clear ping -c 1 google.com > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Van internet kapcsolat" else echo "Nincs internet kapcsolat" fi
A
Ez alapján írja ki, hogy van-e net. A
Ez a sor több átirányítást is tartalmaz:
A > átirányítja a ping kimenetét a /dev/null-ba,
a 2>&1 hozzáfűzi a hibakimenetet a normál kimenethez, így a hibaüzenet is megy a /dev/null-ba.
$? -eq 0 feltétel azt vizsgálja, hogy a ping parancs hiba nélkül ( = 0 ), vagy hibával futott le. Ez alapján írja ki, hogy van-e net. A
ping valódi kimenetére nincs is szükségünk, azt „ki kell dobni”.Ez a sor több átirányítást is tartalmaz:
ping -c 1 google.com > /dev/null 2>&1A > átirányítja a ping kimenetét a /dev/null-ba,
a 2>&1 hozzáfűzi a hibakimenetet a normál kimenethez, így a hibaüzenet is megy a /dev/null-ba.
Egysoros változat:
#!/bin/bash clear ping -c 1 google.com > /dev/null 2>&1 && echo "Van internet kapcsolat" || echo "Nincs internet kapcsolat"
A && lefuttatja a „sikeres” kiírást, ha a
A || pedig a „sikertelen” kiírást írja ki, ha a
ping parancs hiba nélkül fut le. A || pedig a „sikertelen” kiírást írja ki, ha a
ping hibára futott.
Fájlok megszámlálása
Egy mappában levő fájlokat számlálja meg rekurzívan.
find /konyvtar -type f | wc -l1. find /konyvtar -type f : megkeresi az összes normál fájlt
2. | wc -l : megszámlálja a bemeneten kapott sorokat (azaz a talált fájlok számát)
#!/bin/bash clear # KÖNYVTÁR VÁLASZTÁSA if [ -z "$1" ]; then SEARCH_DIR="." # ha a $1 üres, akkor a jelenlegi mappát listázza else SEARCH_DIR="$1" # ha adtunk meg paramétert a szkript neve után ($1), akkor az lesz a könyvtár, amiben számol fi # A FÁJLOK MEGSZÁMOLÁSA echo "A(z) ‘$KONYVTAR’ könyvtárban összesen: $(find "$KONYVTAR" -type f | wc -l) fájl található."
😎 Összetettebb szkriptek
szerverek/linux/cli/bash-szkriptek.txt · Utolsó módosítás: szerkesztette: fm
