5 scripts de Shell per als principiants de Linux per aprendre a programar Shell - Part II
Per aprendre alguna cosa cal fer-ho, sense por de no tenir èxit. Crec en la practicitat i, per tant, t'acompanyaré al món pràctic del llenguatge de scripting.
Aquest article és una extensió del nostre primer article Comprendre Linux Shell i Basic Shell Scripting - Part I, on us donem un tast de Scripting, continuant que no us decebrà en aquest article.
Guió 1: dibuixar un patró especial
#!/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"
La majoria de les paraules clau anteriors les coneixereu i la majoria s'explica per si mateix. Per exemple, MAX estableix el valor màxim de la variable, for és un bucle i qualsevol cosa dins del bucle s'executa una i altra vegada fins que el bucle és vàlid per al valor d'entrada donat.
chmod 755 Special_Pattern.sh ./Special_Pattern.sh Enter Number between (5 to 9) : 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Whenever you need help, linux-console.net is always there
Si coneixeu una mica qualsevol llenguatge de programació, aprendre l'script anterior no és difícil, fins i tot si sou nou en computació, programació i Linux, no serà gaire difícil.
Guió 2: Creació de guió colorit
Qui diu, Linux és incolor i avorrit, deseu els codis següents a qualsevol cosa [dot] sh, feu-lo executable i executeu-lo, no oblideu dir-me com va ser, pensa què pots aconseguir, implementant-lo en algun lloc.
#!/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"
Nota: no us molesteu pel codi de colors ara, els que són importants per a vosaltres aniran a la vostra llengua, a poc a poc.
Avís: és possible que el vostre terminal no tingui la possibilitat de parpellejar.
chmod 755 Colorfull.sh ./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
Script 3: xifra un fitxer/directori
Aquest script xifrarà un fitxer (recordeu? directori/controlador/... tot es tracta com a fitxer, a Linux). La limitació actual de l'script anterior és que no admet la completació automàtica del nom amb TAB. A més, cal col·locar l'script i el fitxer a xifrar a la mateixa carpeta. És possible que hàgiu d'instal·lar \pinentry-gui, fent servir el paquet yum o apt, si cal.
yum install pinentry-gui apt-get install pinentry-gui
Creeu un fitxer anomenat Encrypt.sh i col·loqueu el següent script, feu-lo executable i executeu-lo tal com es mostra.
#!/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
Sortida de mostra
chmod 755 Encrypt.sh ./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 : això xifrarà el vostre fitxer, utilitzant una contrasenya, també coneguda com contrasenya. En aquest procés d'aprenentatge mai hauríeu pensat que el procés real d'aprenentatge podria ser tan fàcil. Aleshores, després de xifrar un fitxer, què necessiteu? Òbviament! desxifrant el fitxer. I vull que tu, l'aprenent, el lector, escriguis tu mateix l'script de desxifrat, no et preocupis, no et deixo al mig, només vull que treguis alguna cosa d'aquest article.
Nota: gpg -d nomfitxer.gpg > nomfitxer és el que necessiteu implementar al vostre script de desxifrat. Podeu publicar el vostre guió al comentari si teniu èxit, si no, podeu demanar-me que l'escrigui per vosaltres.
Script 4: Comprovació de l'ús del servidor
Comprovar l'ús del servidor és una de les tasques importants d'un administrador, i un bon administrador és aquell que sap automatitzar la seva tasca diària. A continuació es mostra l'script que donarà molta informació sobre el vostre servidor. Comproveu-ho vosaltres mateixos.
#!/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
chmod 755 Server-Health.sh ./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 [email 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
Nota: us he donat l'script que dóna la sortida al propi terminal, què tal si obteniu la sortida en un fitxer per a una futura referència. Implementeu-lo mitjançant l'operador de redirecció.
- ‘>‘ : l'operador de redirecció provoca la creació d'un fitxer i, si existeix, el contingut es sobreescriu.
- ‘>>‘ : quan feu servir >>, esteu afegint informació en lloc de substituir-la.
- ‘>>‘ és segur, en comparació amb ‘>‘
Script 5: comproveu l'espai en disc i envia una alerta per correu electrònic
Què tal rebre un correu electrònic quan l'ús del disc a la partició PART és més gran que el màxim permès, és un script salvavides per als administradors web amb poques modificacions?
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
Nota: elimineu USUARI amb el vostre nom d'usuari. Podeu comprovar el correu mitjançant l'ordre correu.
L'escriptura i la programació de guions van més enllà dels límits, qualsevol cosa i tot es pot implementar segons sigui necessari. Això és tot de moment, en el meu proper article us donaré diferents gustos de guió. Fins aleshores estigueu tranquils i atents, gaudiu.