5 Shell Script Linux kezdőknek a Shell programozás elsajátításához – II. rész
Ahhoz, hogy megtanuljon valamit, meg kell tennie, anélkül, hogy attól félne, hogy sikertelen lesz. Hiszek a gyakorlatiasságban, és így elkísérem Önt a szkriptnyelv gyakorlati világába.
Ez a cikk a Linux Shell és az alapvető shell-parancsfájlok megértése – I. rész című első cikkünk kiterjesztése, amelyben ízelítőt adtunk a szkriptelésből, folytatva, hogy ebben a cikkben nem fogunk csalódást okozni.
1. szkript: Speciális minta rajzolása
#!/bin/bash
MAX_NO=0
echo -n "Enter Number between (5 to 9) : "
read MAX_NO
if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
echo "WTF... I ask to enter number between 5 and 9, Try Again"
exit 1
fi
clear
for (( i=1; i<=MAX_NO; i++ )) do for (( s=MAX_NO; s>=i; s-- ))
do
echo -n " "
done
for (( j=1; j<=i; j++ )) do echo -n " ." done echo "" done ###### Second stage ###################### for (( i=MAX_NO; i>=1; i-- ))
do
for (( s=i; s<=MAX_NO; s++ ))
do
echo -n " "
done
for (( j=1; j<=i; j++ ))
do
echo -n " ."
done
echo ""
done
echo -e "\n\n\t\t\t Whenever you need help, linux-console.net is always there"
A fenti „kulcsszavak” többségét ismeri, és legtöbbjük magától értetődő. például a MAX beállítja a változó maximális értékét, mivel ez egy ciklus, és a cikluson belül bármi újra és újra végrehajtódik, amíg a ciklus érvényes lesz az adott bemeneti értékre.
Minta kimenet
[root@tecmint ~]# chmod 755 Special_Pattern.sh
[root@tecmint ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
.
. .
. . .
. . . .
. . . . .
. . . . . .
. . . . . .
. . . . .
. . . .
. . .
. .
.
Whenever you need help, linux-console.net is always there
Ha valaki egy kicsit is tisztában van bármely programozási nyelvvel, a fenti szkript megtanulása nem nehéz, még akkor sem lesz nehéz, ha még kezdő a számítás, a programozás és a Linux területén.
Töltse le a Special_Pattern.sh
2. szkript: Színes szkript létrehozása
Aki azt mondja: A Linux színtelen és unalmas, mentse el az alábbi kódokat bármire [pont] sh, tegye végrehajthatóvá, és futtassa, ne felejtsd el elmondani, hogy volt, gondold meg, mit érhetsz el, valahol megvalósítva.
#!/bin/bash
clear
echo -e "33[1m Hello World"
bold effect
echo -e "33[5m Blink"
blink effect
echo -e "33[0m Hello World"
back to normal
echo -e "33[31m Hello World"
Red color
echo -e "33[32m Hello World"
Green color
echo -e "33[33m Hello World"
See remaining on screen
echo -e "33[34m Hello World"
echo -e "33[35m Hello World"
echo -e "33[36m Hello World"
echo -e -n "33[0m"
back to normal
echo -e "33[41m Hello World"
echo -e "33[42m Hello World"
echo -e "33[43m Hello World"
echo -e "33[44m Hello World"
echo -e "33[45m Hello World"
echo -e "33[46m Hello World"
echo -e "33[0m Hello World"
Megjegyzés: Ne törődj most a színkóddal, mert a számodra fontosak fokozatosan a nyelvednél lesznek.
Figyelmeztetés: Előfordulhat, hogy terminálja nem képes villogni.
Minta kimenet
[root@tecmint ~]# chmod 755 Colorfull.sh
[root@tecmint ~]# ./Colorfull.sh
Hello World
Blink
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Töltse le a Colorfull.sh-t
3. szkript: Fájl/könyvtár titkosítása
Ez a szkript titkosít egy fájlt (emlékszik? könyvtár/illesztőprogram/…. Linux esetén minden fájlként kezelendő >). A fenti szkript jelenlegi korlátozása az, hogy nem támogatja a név automatikus kiegészítését TAB használatával. Ezenkívül ugyanabba a mappába kell helyeznie a szkriptet és a titkosítandó fájlt. Lehetséges, hogy telepítenie kell a „pinentry-gui” elemet a yum vagy az apt csomag használatával, ha szükséges.
[root@midstage ~]# yum install pinentry-gui
[root@midstage ~]# apt-get install pinentry-gui
Hozzon létre egy „Encrypt.sh” nevű fájlt, helyezze el a következő szkriptet, tegye végrehajthatóvá, és futtassa az ábra szerint.
#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to thh same folder, where a file to be
encrypted is present"
echo "Enter the Exact File Name with extension"
read file;
gpg -c $file
echo "I have encrypted the file successfully..."
echo "Now I will be removing the original file"
rm -rf $file
Minta kimenet
[root@tecmint ~]# chmod 755 Encrypt.sh
[root@tecmint ~]# ./Encrypt.sh
Welcome, I am ready to encrypt a file/folder for you
currently I have a limitation, Place me to the same folder, where a file to be
encrypted is present
Enter the Exact File Name with extension
package.xml
┌─────────────────────────────────────────────────────┐
│ Enter passphrase │
│ │
│ │
│ Passphrase *******_________________________________ │
│ │
│ <OK> <Cancel> │
└─────────────────────────────────────────────────────┘
Please re-enter this passphrase
┌─────────────────────────────────────────────────────┐
│ Please re-enter this passphrase │
│ │
│ Passphrase ********________________________________ │
│ │
│ <OK> <Cancel> │
└─────────────────────────────────────────────────────┘
I have encrypted the file successfully...
Now I will be removing the original file
</pre>
gpg -c : Ez titkosítja a fájlt egy jelszóval, más néven jelszóval. Ebben a tanulási folyamatban soha nem gondolta volna, hogy a tanulás tényleges folyamata ennyire egyszerű lehet. Tehát mire van szüksége egy fájl titkosítása után? Magától értetődően! a fájl visszafejtése. És azt akarom, hogy Ön – a tanuló, az olvasó – maga írja meg a visszafejtő szkriptet, ne aggódjon, nem hagylak a közepén, csak azt akarom, hogy nyerjen valamit ebből a cikkből.
Megjegyzés: A gpg -d fájlnév.gpg > fájlnév az, amit meg kell valósítania a visszafejtő szkriptben. A forgatókönyvet kommentben elküldheted, ha sikerült, ha nem, megkérhetsz, hogy írjam meg helyetted.
Töltse le az Encrypt.sh-t
4. szkript: A kiszolgáló kihasználtságának ellenőrzése
A szerver kihasználtságának ellenőrzése az adminisztrátor egyik fontos feladata, a jó rendszergazda pedig az, aki tudja, hogyan automatizálja napi feladatait. Az alábbiakban látható a szkript, amely sok ilyen információt ad a szerverről. Ellenőrizd magad.
#!/bin/bash
date;
echo "uptime:"
uptime
echo "Currently connected:"
w
echo "--------------------"
echo "Last logins:"
last -a |head -3
echo "--------------------"
echo "Disk and memory usage:"
df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
echo "--------------------"
start_log=`head -1 /var/log/messages |cut -c 1-12`
oom=`grep -ci kill /var/log/messages`
echo -n "OOM errors since $start_log :" $oom
echo ""
echo "--------------------"
echo "Utilization and most expensive processes:"
top -b |head -3
echo
top -b |head -10 |tail -4
echo "--------------------"
echo "Open TCP ports:"
nmap -p- -T4 127.0.0.1
echo "--------------------"
echo "Current connections:"
ss -s
echo "--------------------"
echo "processes:"
ps auxf --width=200
echo "--------------------"
echo "vmstat:"
vmstat 1 5
Minta kimenet
[root@tecmint ~]# chmod 755 Server-Health.sh
[root@tecmint ~]# ./Server-Health.sh
Tue Jul 16 22:01:06 IST 2013
uptime:
22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
Currently connected:
22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
tecmint pts/0 116.72.134.162 21:48 0.00s 0.03s 0.03s sshd: tecmint [priv]
--------------------
Last logins:
tecmint pts/0 Tue Jul 16 21:48 still logged in 116.72.134.162
tecmint pts/0 Tue Jul 16 21:24 - 21:43 (00:19) 116.72.134.162
--------------------
Disk and memory usage:
Free/total disk: 292G / 457G
Free/total memory: 3510 / 3838 MB
--------------------
OOM errors since Jul 14 03:37 : 0
--------------------
Utilization and most expensive processes:
top - 22:01:07 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.3%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3788 1128 932 S 0.0 0.0 0:32.94 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:14.07 migration/0
Megjegyzés: Megadtam azt a szkriptet, amely magában a terminálban adja meg a kimenetet. Mit szólnál ahhoz, hogy a kimenetet egy fájlba helyezzük későbbi hivatkozás céljából. Végezze el az átirányítási operátor használatával.
- ‘>’ : az átirányítási operátor létrehoz egy fájlt, és ha létezik, a tartalom felülíródik.
- '>>' : a >> használatakor információkat ad hozzá, nem pedig lecseréli.
- A „>” biztonságos a „>”-hoz képest
Töltse le a Server-Health.sh-t
5. szkript: Ellenőrizze a lemezterületet, és e-mail értesítést küld
Mit szólna e-mailhez, ha a PART partíció lemezhasználata nagyobb, mint a megengedett maximális érték, ez egy életmentő szkript webes rendszergazdák számára, kevés módosítással.
MAX=95
[email
PART=sda1
USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
if [ $USE -gt $MAX ]; then
echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL
fi
Megjegyzés: Távolítsa el a „USER” elemet a felhasználónevével együtt. A leveleket a „mail” paranccsal ellenőrizheti.
Töltse le a Check-Disk-Space.sh-t
A szkriptírás és programozás túlmutat a határokon, bármi és minden megvalósítható igény szerint. Egyelőre ennyi. A következő cikkemben a forgatókönyvírás különböző ízeit mutatom be. Addig is maradjatok nyugodtak, és élvezzétek.