Zoeken op website

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.

  1. Begrijp de basistips voor Linux Shell-scripttaal – Deel I
  2. 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.

  1. echo‘: drukt alles af wat tussen de aanhalingstekens staat.
  2. $‘: Is een shell-variabele.
  3. >>‘: 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.