Zeilen door de wereld van Linux BASH Scripting - Deel III
De voorgaande artikelen uit de serie ‘Shell Scripting’ werden zeer gewaardeerd en daarom schrijf ik dit artikel om het nooit eindigende leerproces te verlengen.
- Begrijp de basistips voor Linux Shell-scripttaal – Deel I
- 5 Shell-scripts voor Linux-nieuwkomers om Shell-programmering te leren - Deel II
Bash-trefwoorden
Een trefwoord is een woord of symbool dat een speciale betekenis heeft voor een computertaal. De volgende symbolen en woorden hebben een speciale betekenis voor Bash als ze niet tussen aanhalingstekens staan en het eerste woord van een commando zijn.
! esac select }
case fi then [[
do for until ]]
done function while elif
if time else in {
In tegenstelling tot de meeste computertalen staat Bash toe dat trefwoorden worden gebruikt als variabelenamen, ook al kan dit scripts moeilijk leesbaar maken. Om scripts begrijpelijk te houden, mogen er geen trefwoorden worden gebruikt voor de namen van variabelen.
Een commando wordt in de shell geïmplementeerd als $(commando). Mogelijk moet u het volledige opdrachtpad opnemen. bijv. $ (/bin/date), voor correcte uitvoering.
Mogelijk kent u het pad van een specifiek programma met behulp van de opdracht ‘whereis’. bijvoorbeeld waar is de datum
[root@tecmint /]# whereis date
date: /bin/date /usr/share/man/man1/date.1.gz
Dat is genoeg voor nu. We zullen nu niet veel over deze theorie praten. Kom naar Scripts.
Verplaats huidige werkmap
Ga van de huidige werkmap naar een hoger niveau door tijdens de uitvoering alleen maar de numerieke waarde aan het einde van het script op te geven.
#! /bin/bash
LEVEL=$1
for ((i = 1; i <= LEVEL; i++))
do
CDIR=../$CDIR
done
cd $CDIR
echo "You are in: "$PWD
exec /bin/bash
Sla de bovenstaande codes op als “up.sh“ op uw bureaublad. Maak het uitvoerbaar (chmod 755 up.sh). Loop:
./up.sh 2 (verplaatst de huidige werkmap naar twee niveaus hoger).
./up.sh 4 (verplaatst de huidige werkmap naar vier niveaus hoger).
Gebruik en toepassingsgebied
In grotere scripts die een map in een map binnen… bevatten met bibliotheken, binaire bestanden, pictogrammen, uitvoerbare bestanden, enz. op verschillende locatie kunt u als ontwikkelaar dit script implementeren om zeer geautomatiseerd naar de gewenste locatie te gaan.
Opmerking: For is een lus in het bovenstaande script en deze zal blijven worden uitgevoerd totdat de waarden voor de lus waar zijn.
Voorbeelduitvoer
[root@tecmint /]# chmod 755 up
[root@tecmint /]# ./up.sh 2
You are in: /
[root@tecmint /]# ./up.sh 4
You are in: /
[root@tecmint /]#
Download up.sh
Maak een willekeurig bestand of map
Creëer een willekeurig bestand (map) zonder kans op duplicatie.
#! /bin/bash
echo "Hello $USER";
echo "$(uptime)" >> "$(date)".txt
echo "Your File is being saved to $(pwd)"
Dit is een eenvoudig script, maar de werking ervan is niet zo eenvoudig.
- ‘echo‘: drukt alles af wat tussen de aanhalingstekens staat.
- ‘$‘: Is een shell-variabele.
- ‘>>‘: De uitvoer wordt omgeleid naar de uitvoer van het date commando, gevolgd door de txt extensie.
We weten dat de uitvoer van het commando datum datum is, en tijd in uur, minuut, seconde samen met jaar. Daarom konden we uitvoer krijgen op een georganiseerde bestandsnaam zonder de kans op duplicatie van de bestandsnaam. Het kan erg handig zijn als de gebruiker het bestand nodig heeft dat is gemaakt met een tijdstempel voor toekomstig gebruik.
Voorbeelduitvoer
[root@tecmint /]# ./randomfile.sh
Hello server
Your File is being saved to /home/server/Desktop
U kunt het bestand bekijken dat op het bureaublad is gemaakt met de datum van vandaag en de huidige tijd.
[root@tecmint /]# nano Sat\ Jul\ 20\ 13\:51\:52\ IST\ 2013.txt
13:51:52 up 3:54, 1 user, load average: 0.09, 0.12, 0.08
Hieronder wordt een meer gedetailleerde implementatie van het bovenstaande script gegeven, dat werkt volgens het bovenstaande principe en erg handig is bij het verzamelen van de netwerkinformatie van een Linux-server.
Randomfile.sh downloaden
Script om netwerkinformatie te verzamelen
Verzamelt netwerkinformatie op een Linux server. Het script is te groot en het is niet mogelijk om de hele code en uitvoer van het script hier te plaatsen. Het is dus beter dat u het script kunt downloaden via onderstaande downloadlink en het zelf kunt testen.
Opmerking: Mogelijk moet u het lsb-core pakket en andere vereiste pakketten en afhankelijkheid installeren. Apt of Yum de vereiste pakketten. Uiteraard moet je root zijn om het script uit te voeren, omdat de meeste hier gebruikte commando's zijn geconfigureerd om als root te worden uitgevoerd.
Voorbeelduitvoer
[root@tecmint /]# ./collectnetworkinfo.sh
The Network Configuration Info Written To network.20-07-13.info.txt. Please email this file to your_name@service_provider.com. ktop
U kunt het bovenstaande e-mailadres in uw script wijzigen, zodat het naar u wordt verzonden. Het automatisch gegenereerde bestand kan worden bekeken.
Download collectnetinfo.sh
Script naar Converteert HOOFDLETTERS naar kleine letters
Een script dat HOOFDLETTERS naar kleine letters converteert en de uitvoer omleidt naar een tekstbestand “klein.txt” dat indien nodig kan worden aangepast.
#!/bin/bash
echo -n "Enter File Name : "
read fileName
if [ ! -f $fileName ]; then
echo "Filename $fileName does not exists"
exit 1
fi
tr '[A-Z]' '[a-z]' < $fileName >> small.txt
Dit bovenstaande script kan de hoofdletters van een bestand van elke lengte met een enkele klik converteren van hoofdletters naar kleine letters en vice versa, indien nodig, met weinig aanpassingen.
Voorbeelduitvoer
[root@tecmint /]# ./convertlowercase.sh
Enter File Name : a.txt
Initial File:
A
B
C
D
E
F
G
H
I
J
K
...
Uitvoer van nieuw bestand (small.txt):
a
b
c
d
e
f
g
h
i
j
k
...
Download converterkleine letters.sh
Eenvoudig rekenprogramma
#! /bin/bash
clear
sum=0
i="y"
echo " Enter one no."
read n1
echo "Enter second no."
read n2
while [ $i = "y" ]
do
echo "1.Addition"
echo "2.Subtraction"
echo "3.Multiplication"
echo "4.Division"
echo "Enter your choice"
read ch
case $ch in
1)sum=`expr $n1 + $n2`
echo "Sum ="$sum;;
2)sum=`expr $n1 - $n2`
echo "Sub = "$sum;;
3)sum=`expr $n1 \* $n2`
echo "Mul = "$sum;;
4)sum=`expr $n1 / $n2`
echo "Div = "$sum;;
*)echo "Invalid choice";;
esac
echo "Do u want to continue (y/n)) ?"
read i
if [ $i != "y" ]
then
exit
fi
done
Voorbeelduitvoer
[root@tecmint /]# ./simplecalc.sh
Enter one no.
12
Enter second no.
14
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
1
Sum =26
Do u want to continue (y/n)) ?
y
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
3
mul = 14812
Do u want to continue (y/n)) ?
n
Download simplecalc.sh
Zo zag je hoe gemakkelijk het was om een krachtig programma te maken terwijl berekeningen op zo'n eenvoudige manier werden uitgevoerd. Het is niet het einde. We zullen nog minstens één artikel uit deze serie publiceren, dat een breed perspectief bestrijkt vanuit administratief perspectief.
Dat is het voor nu. Als lezer en beste criticus, vergeet niet ons te vertellen hoeveel en wat je leuk vond aan dit artikel en wat je in het toekomstige artikel wilt zien. Elke vraag is van harte welkom in commentaar. Blijf tot die tijd gezond, veilig en afgestemd. Like en Deel ons en help ons verspreiden.