hoe een Shell Script in Linux draaien [Essentials uitgelegd voor Beginners]

er zijn twee manieren om een shell script in Linux uit te voeren. U kunt gebruiken:

bash script.sh

of je kunt het shell script als volgt uitvoeren:

./script.sh

dat is misschien simpel, maar het verklaart niet veel. Maak je geen zorgen, Ik zal het nodige uitleggen met voorbeelden zodat je begrijpt waarom een bepaalde syntaxis wordt gebruikt in het opgegeven formaat tijdens het uitvoeren van een shell script.

ik ga dit shellscript met één regel gebruiken om dingen zo eenvoudig mogelijk te maken:

:~/Scripts$ cat hello.sh echo "Hello World!"

Methode 1: het uitvoeren van een shell script door het bestand als argument door te geven aan shell

de eerste methode omvat het doorgeven van de script bestandsnaam als argument aan de shell.

gezien het feit dat bash de standaard shell is, kunt u een script als dit uitvoeren:

bash hello.sh

kent u het voordeel van deze aanpak? Je script hoeft geen uitvoerrechten te hebben. Handig voor snelle en eenvoudige taken.

een Shell-Script uitvoeren Linux
een Shell-Script uitvoeren Linux

als je nog niet bekend bent, raad ik je aan om mijn gedetailleerde handleiding over bestandsrechten in Linux te lezen.

Houd er rekening mee dat het een shell script moet zijn dat je als argument doorgeeft. Een shell script bestaat uit commando ‘ s. Als je een normaal tekstbestand gebruikt, zal het klagen over onjuiste commando ‘ s.

tekstbestand uitvoeren als Script in Linux
een tekstbestand uitvoeren als Script

in deze aanpak heb je expliciet aangegeven dat je bash wilt gebruiken als de interpreter voor het script.

Shell is slechts EEN programma en bash is een implementatie daarvan. Er zijn andere dergelijke shells programma zoals ksh, zsh, enz. Als je andere shells hebt geïnstalleerd, kun je die ook gebruiken in plaats van bash.

bijvoorbeeld, Ik installeerde zsh en gebruikte het om hetzelfde script uit te voeren:

Shell Script uitvoeren met Zsh
Shell Script uitvoeren met Zsh

aanbevolen lezen:

Methode 2: Voer het shellscript uit door zijn pad

op te geven de andere methode om een shellscript uit te voeren is door zijn pad op te geven. Maar om dat mogelijk te maken, moet uw bestand uitvoerbaar zijn. Anders heb je” permission denied ” fout wanneer je het script probeert uit te voeren.

dus eerst moet je ervoor zorgen dat je script de uitvoerrechten heeft. Je kunt het chmod commando gebruiken om jezelf deze toestemming te geven.:

chmod u+x script.sh

zodra uw script is uitvoerbaar, alles wat je hoeft te doen is om de bestandsnaam te typen samen met het absolute of relatieve pad. Meestal zit je in dezelfde directory dus gebruik je het gewoon zo:

./script.sh

Als u zich niet in dezelfde map bevindt als uw script, kunt u het absolute of relatieve pad naar het script opgeven:

Shell Script uitvoeren in andere map
Shell Script uitvoeren in andere map

dat ./ voor het script is belangrijk (als je in dezelfde map zit als het script)

Shell Scripts uitvoeren Linux

Waarom kunt u de scriptnaam niet gebruiken als u zich in dezelfde map bevindt? Dat komt omdat je Linux systemen zoekt naar uitvoerbare bestanden om te draaien in een paar geselecteerde directory ‘ s die zijn opgegeven in de PATH variabele.

hier is de waarde van de variabele PATH voor mijn systeem:

:~$ echo $PATH/home/abhishek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

dit betekent dat elk bestand met uitvoerrechten in een van de volgende mappen kan worden uitgevoerd vanaf elke locatie in het systeem:

  • /thuis / abhishek/.local/bin
  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /usr/games
  • /usr/local/games
  • /usr/local / games
  • / snap / bin

de binaries of uitvoerbare bestanden voor Linux commando ’s zoals ls, cat etc bevinden zich in een van die directory’ s. Dit is de reden waarom je in staat bent om deze commando ‘ s uit te voeren vanaf elke locatie op uw systeem alleen met behulp van hun namen. Zie, het ls Commando bevindt zich in /usr/bin directory.

Commando Linux lokaliseren

wanneer u het script opgeeft zonder het absolute of relatieve pad, kan het het niet vinden in de mappen die in de variabele PATH worden genoemd.

waarom de meeste shell scripts#! bevatten / bin / bash aan het begin van de shell scripts?

onthoud hoe ik zei dat shell gewoon een programma is en dat er verschillende implementaties van shells zijn.

wanneer u de#! / bin / bash, je specificeert dat het script moet worden uitgevoerd met bash als interpreter. Als je dat niet doet en een script uitvoert ./script.sh manier, het wordt meestal uitgevoerd met welke shell je draait.

maakt het wat uit? Het zou kunnen. De meeste shell-syntaxis komt voor in alle soorten shell, maar sommige kunnen verschillen.

bijvoorbeeld, het array gedrag is anders in bash en zsh shells. In zsh begint de array index bij 1 in plaats van 0.

Bash Vs Zsh
Bash Vs Zsh

Met #! / bin / bash geeft aan dat het script bash shell script is en moet worden uitgevoerd met bash als interpreter ongeacht de shell die wordt gebruikt op het systeem. Als je zsh specifieke syntaxis gebruikt, kun je aangeven dat het zsh script is door #toe te voegen! / bin / zsh als de eerste regel van het script.

de spatie tussen #! / bin / bash maakt niet uit. Je kunt ook #!bin bash.

was het nuttig?

ik hoop dat dit artikel is toegevoegd aan je Linux kennis. Als u nog vragen of suggesties heeft, laat dan een reactie achter.

deskundige gebruikers kunnen dit artikel nog steeds muggenziften over dingen die ik gemist heb. Maar het probleem met dergelijke beginner onderwerpen is dat het niet gemakkelijk is om de juiste balans van informatie te vinden en te voorkomen dat te veel of te weinig details.

als je geïnteresseerd bent in het leren van bash script, hebben we een hele Bash Beginnerserie op onze sysadmin gerichte website Linux Handbook. Als je wilt, kun je het ebook ook kopen met extra oefeningen om Linux Handbook te ondersteunen.

vind je het leuk wat je leest? Deel het alsjeblieft met anderen.

50Shares
  • Facebook0
  • Twitter49
  • LinkedIn1
  • Reddit0

Leave a Reply

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.