Maak je eigen scripts met bash

Linux leren

Ongeacht de Linux-distributie die we gebruiken, ―getwijfeld is mijn favoriet Ubuntu― zodra we dit systeem gaan gebruiken, bepaalde automatiseringsbehoeften​ Dat wil zeggen: maak onze eigen commando's die bepaalde commando's op een gepersonaliseerde manier uitvoeren. Deze behoefte kan verschillende oorzaken hebben:

  • Vereenvoudig de syntaxis van de opdrachten die we gewoonlijk uitvoeren.
  • Onderneem acties die betrekking hebben op alle behoefte die niet in het systeem is voorzien operationeel.
  • Volgorde bestellingen dat we ijverig herhalen.

Hoewel een bash-script in / vanuit elke map kan worden uitgevoerd, is dat meestal het geval maak een map om deze scripts te hosten​ In mijn geval:

$ mkdir /home/pedro/.bin

Ik geloof dit directory (verborgen door de punt voor de naam voor te laten gaan) om alle scripts te bewaren die ik daar gebruik. Dat de naam van de directory verborgen is, heeft geen andere betekenis dan - tenzij expliciet anders aangegeven - verschijnt niet bij het bekijken van / home / pedro vanuit de bestandsviewer in grafische modus.

Nu moet je laat Linux weten dat het daar ook moet kijken (/home/pedro/.bin) de orders die vanaf de terminal worden uitgevoerd.

$ PATH=$PATH;/home/pedro/.bin

Op deze manier zoekt het systeem daar onze bestellingen op totdat we de sessie sluiten. Om deze vereniging permanent te maken:

$ sudo nano /etc/environment

en we voegen toe

:/home/pedro/.bin

aan het einde van de PATH-regel is het erg belangrijk om de dubbele punt niet te vergeten voor het adres van de directory die we opnemen, aangezien dit is het optelmechanisme.

Ons eerste stapsgewijze script

We maken ons bestand aan, zoals dit in mijn geval:

$ touch ~/.bin/donde

En om het te bewerken, kunt u uw favoriete editor gebruiken of deze indicatie volgen:

$ gedit ~/.bin/donde &

En we voegen de volgende inhoud toe:

#!/usr/bin/env bash

if [ $# -lt 1 ];
then
    echo "Necesitas pasar un parámetro"
else
    whereis $1
fi

Script analyse

Onze eerste oproeplijn «keet»(#! / Usr / bin / env bash) vraag Linux om te rapporteren waar bevindt zich de bash-shell en dat wat volgt wordt uitgevoerd volgens de vereisten van bash. Deze voorzorgsmaatregel het is handig om ervoor te zorgen dat onze scripts werken op elke installatie​ Een ander mogelijk keet hij lachte:

#!/bin/bash

Het verschil tussen hen kan erg eng zijn, en ik zal het uitleggen. In deze laatste Ik neem aan dat in ons systeem de bash-shell bevindt zich op het / bin / bash-adres​ Echter, waar ik voorstel in het script Ik denk dat ik niet weet waar het is de bash-tolk. Ik vraag het systeem om hem dat adres op te geven.

Derde regel: zoals u kunt zien, is de tweede regel een if. Voor bash de karakters «$#« bevatten het aantal parameters dat we vanaf de opdrachtregel doorgeven​ Daarom »if [$ # -lt 1];» betekent letterlijk "als het aantal parameters kleiner is dan 1".

Vierde regel: Dan (letterlijk vertaald vanuit het Engels: toen), hier wordt aangegeven wat er daarna komt wordt uitgevoerd wanneer de conditie-evaluatie if wees eerlijk: met andere woorden, het aantal parameters is minder dan 1, dat wil zeggen nul.

Vijfde regel: Als we ons script zonder parameters uitvoeren, zullen we in de terminal «U moet een parameter doorgeven».

Zesde regel: Geeft aan dat wat volgt zal worden uitgevoerd wanneer de voorwaarde die we hebben verklaard niet waar is.

Zevende regel: Se voer het commando uit «waar is« vergezeld van de inhoud die we hebben doorgegeven als eerste parameter.

Achtste regel: met «fi»Geeft aan dat het blok eindigt if.

Ons script testen

Het is belangrijk schrijfrechten toevoegen naar het script:

$ chmod -x ~/.bin/donde

Zonder dit zou een "toestemming geweigerd" -fout verschijnen.​ Daarna kunnen we ons script uitvoeren.

$ donde php

Het zou ons de locatie van de php-binaire bestanden, hun bronbestanden en man-pagina's moeten tonen. Zoiets:

php: /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php 
/usr/share/php7.0-readline /usr/share/php7.0-json /usr/share/php7.0-opcache 
/usr/share/php7.0-common /usr/share/php /usr/share/man/man1/php.1.gz

Samenvatting

  • We maken een directory ".bin" om onze scripts te huisvesten.
  • Wij voorzien informatie naar Linux om deze map op te nemen in de opdrachtzoekopdrachten.
  • We maken ons script.
  • Verschil tussen verschillend keet.
  • Gebruik van aantal parameters doorgegeven met $ #.
  • Gebruik van eerste parameter met $1.

Ik hoop en wens dat dit script nuttig voor je is.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   miguel zei

    Heel goed en goed uitgelegd, maar waar verwijst een parameter naar?

    1.    Tijdelijke afbeelding voor Pedro Ruiz Hidalgo zei

      Bedankt Miguel!

      Ik versta onder parameter alle aanvullende informatie die aan een programma, functie of systeem wordt geleverd. Aangezien dit omslachtig kan zijn, wil ik u een paar voorbeelden geven.

      In het linux-commando om het bestand a.txt naar het bestand b.txt te kopiëren, zouden we het volgende schrijven:

      $cp a.txt b.txt

      Het cp-programma ontvangt hier twee parameters die de namen zijn van twee bestanden, de eerste (moet bestaan) a.txt en de tweede b.txt.

      Nog een voorbeeld: als u vanuit de console naar de printer verzendt met de opdracht

      $ lp-bestand.pdf

      In dit geval is "file.pdf" een parameter voor het lp-programma.

      Ik hoop dat ik uw twijfels heb bevredigd.

      groeten

  2.   miguel zei

    Mijn opmerkingen komen niet naar buiten, het is een gebrek aan respect, ik keer niet meer terug naar dit forum.

    1.    Tijdelijke afbeelding voor Pedro Ruiz Hidalgo zei

      Ik weet niet wat er is gebeurd, deze is in ieder geval gepubliceerd.

      Groeten.