5 Shell skripti za početnike u Linuxu za učenje programiranja ljuske - II. dio
Da biste nešto naučili, morate to učiniti, bez straha da ćete biti neuspješni. Vjerujem u praktičnost i stoga ću vas pratiti u praktičnom svijetu skriptnog jezika.
Ovaj je članak proširenje našeg prvog članka Razumijevanje Linux Shell i osnovno skriptiranje ljuske – I. dio, gdje smo vam dali okus skriptiranja, nastavljajući da vas nećemo razočarati u ovom članku.
Skripta 1: Crtanje posebnog uzorka
#!/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"
Većina gornjih 'ključnih riječi' bi vam bila poznata i većina njih je sama po sebi razumljiva. npr., MAX postavlja maksimalnu vrijednost varijable, jer je petlja i sve unutar petlje se izvršava iznova i iznova dok petlja ne bude važeća za danu vrijednost unosa.
Uzorak izlaza
[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
Ako ste iole svjesni bilo kojeg programskog jezika, učenje gornje skripte nije teško, čak i ako ste početnik u računanju, programiranju i Linuxu, neće vam biti teško.
Preuzmite Special_Pattern.sh
Skripta 2: Stvaranje šarene skripte
Tko kaže, Linux je bezbojan i dosadan, spremite donje kodove na bilo što [točka] sh, učinite ga izvršnim i pokrenite ga, nemojte ne zaboravi mi reći kako je bilo, razmisli što možeš postići implementirajući to negdje.
#!/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"
Napomena: Nemojte se sada zamarati kodovima boja, oni koji su vam važni bit će vam na jeziku, postupno.
Upozorenje: Vaš terminal možda nema mogućnost treptanja.
Uzorak izlaza
[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
Preuzmite Colorfull.sh
Skripta 3: Šifrirajte datoteku/direktorij
Ova skripta će šifrirati datoteku (sjećate se? direktorij/pokretač/…. sve se tretira kao datoteka, u Linuxu ). Trenutačno ograničenje gornje skripte je da ne podržava automatsko dovršavanje imena pomoću TAB. Štoviše, trebate smjestiti skriptu i datoteku za šifriranje u istu mapu. Možda ćete morati instalirati “pinentry-gui”, koristeći yum ili apt paket, ako je potrebno.
[root@midstage ~]# yum install pinentry-gui
[root@midstage ~]# apt-get install pinentry-gui
Izradite datoteku pod nazivom “Encrypt.sh” i postavite sljedeću skriptu, učinite je izvršnom i pokrenite je kako je prikazano.
#!/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
Uzorak izlaza
[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 : Ovo će šifrirati vašu datoteku, koristeći zaporku koja se zove lozinka. U ovom procesu učenja nikada ne biste pomislili da stvarni proces učenja može biti toliko lak. Što trebate nakon šifriranja datoteke? Očito! dešifriranje datoteke. I želim da ti - učenik, čitatelj sam napišeš skriptu za dešifriranje, ne brini, neću te ostaviti u sredini, samo želim da izvučeš nešto iz ovog članka.
Napomena: gpg -d nazivdatoteke.gpg > imedatoteke je ono što trebate implementirati u svoju skriptu za dešifriranje. Možete objaviti svoju skriptu u komentaru ako bude uspješna, ako ne možete me zamoliti da je napišem za vas.
Preuzmite Encrypt.sh
Skripta 4: Provjera iskorištenosti poslužitelja
Provjera iskorištenosti poslužitelja jedan je od važnih zadataka administratora, a dobar administrator je onaj koji zna kako automatizirati svoj svakodnevni zadatak. Ispod je skripta koja će vam dati mnogo takvih informacija o vašem poslužitelju. Provjerite sami.
#!/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
Uzorak izlaza
[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
Napomena: Dao sam vam skriptu koja daje izlaz u samom terminalu, što kažete na dobivanje izlaza u datoteci za buduću upotrebu. Implementirajte ga pomoću operatora preusmjeravanja.
- ‘>’ : operator preusmjeravanja uzrokuje stvaranje datoteke, a ako postoji, sadržaj se prepisuje.
- ‘>>’ : kada koristite >>, dodajete informacije, a ne zamjenjujete ih.
- '>>' je siguran u usporedbi s '>'
Preuzmite Server-Health.sh
Skripta 5: Provjerite prostor na disku i šalje upozorenje e-poštom
Što kažete na primanje e-pošte kada je korištenje diska u particiji PART veće od maksimalno dopuštenog, to je skripta koja spašava život za web administratore uz male izmjene.
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
Napomena: Uklonite “USER” sa svojim korisničkim imenom. Poštu možete provjeriti pomoću naredbe ‘mail’.
Preuzmite Check-Disk-Space.sh
Pisanje skripti i programiranje je izvan granica, sve i svašta se može implementirati prema potrebi. To je sve za sada, u svom sljedećem članku dat ću vam neke različite okuse skriptiranja. Do tada ostanite hladni i uigrani, uživajte.