Skapa dina egna skript med bash

Lärande Linux

Oavsett vilken Linux-distribution vi använder, är min tvekan tvivelaktigt min favorit Ubuntu så snart vi börjar använda detta system, säkert automatiseringsbehov. Det vill säga: skapa vår egna kommandon som utför vissa kommandon på ett personligt sätt. Detta behov kan bero på vissa orsaker:

  • Förenkla syntaxen av de kommandon som vi vanligtvis utför.
  • Vidta åtgärder som täcker alla behov som inte förutses i systemet operativ.
  • Sekvensbeställningar som vi upprepade gånger upprepar.

Även om ett bash-skript kan köras i / från vilken katalog som helst, är det vanligtvis skapa en katalog för att vara värd för dessa skript. I mitt fall:

$ mkdir /home/pedro/.bin

Jag tror det här katalog (dold genom att leda perioden framför namnet) att hålla alla skript jag använder där. Att namnet på katalogen är dolt har ingen annan betydelse än - om inte annat uttryckligen anges - visas inte när du tittar på / home / pedro från filvisaren i grafiskt läge.

Nu måste du informera Linux om att det också ska se där (/home/pedro/.bin) beställningarna som utförs från terminalen.

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

På detta sätt kommer systemet att leta efter våra beställningar där tills vi avslutar sessionen. För att göra denna förening permanent:

$ sudo nano /etc/environment

och vi lägger till

:/home/pedro/.bin

i slutet av PATH-raden är det mycket viktigt att inte glömma kolon före adressen till katalogen som vi inkluderar, eftersom detta är tilläggsmekanismen.

Vårt första steg-för-steg-skript

Vi skapar vår fil, så här i mitt fall:

$ touch ~/.bin/donde

Och för att redigera det kan du använda din föredragna redigerare eller följa denna indikation:

$ gedit ~/.bin/donde &

Och vi lägger till följande innehåll:

#!/usr/bin/env bash

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

Skriptanalys

Vår första samtalslinje «shebang»(#! / Usr / bin / env bash) fråga Linux att rapportera var ligger bash-skalet och att det som följer utförs enligt bashs krav. Denna försiktighetsåtgärd det är bekvämt att se till att våra skript fungerar på alla installationer. En annan möjlig shebang han skrattade:

#!/bin/bash

Skillnaden mellan dem kan vara väldigt freaky, och jag kommer att förklara det. I denna sista Jag antar det i vårt system bash-skalet finns på / bin / bash-adressen. Men där jag föreslår i manuset Jag antar att jag inte vet var det är bash tolk. Jag ber systemet för honom att ange den adressen.

Tredje raden: Som du kan se är den andra raden ett if. För bash karaktärerna «$#« innehålla antalet parametrar som vi skickar från kommandoraden. Därför »om [$ # -lt 1];» betyder bokstavligen "om antalet parametrar är mindre än 1".

Fjärde raden: Sedan (bokstavligen översatt från engelska: då), här anges det att vad som kommer nästa kommer att utföras när tillståndsutvärderingen if var sann: med andra ord är antalet parametrar mindre än 1, det vill säga noll.

Femte raden: Om vi ​​utför vårt skript utan några parametrar, kommer vi att visa i terminalen «Du måste skicka en parameter».

Sjätte raden: Indikerar att det som följer kommer att köras när det villkor vi har förklarat inte är sant.

Sjunde raden: Se kör kommandot «var är« åtföljs av innehållet som vi har skickat som första parametern.

Åttonde raden: med «fi»Indikerar att blocket slutar if.

Testar vårt manus

Det är viktigt lägg till skrivbehörighet till manuset:

$ chmod -x ~/.bin/donde

Utan detta skulle ett "tillstånd nekat" -fel visas.. Efter det kan vi köra vårt skript.

$ donde php

Det bör visa oss platsen för php-binärer, deras källfiler och man-sidor. Något sådant:

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

Recapping

  • Vi möjliggör en katalog ".bin" för att hysa våra skript.
  • Vi tillhandahåller information till Linux för att inkludera den här katalogen i kommandosökningarna.
  • Vi skapar vårt manus.
  • Skillnad mellan annorlunda shebang.
  • Användning av antal parametrar som skickats med $ #.
  • Användning av första parametern med $1.

Jag hoppas och önskar att det här skriptet är användbart för dig.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   miguel sade

    Mycket bra och väl förklarade, men vad hänvisar en parameter till?

    1.    Platshållarbild för Pedro Ruiz Hidalgo sade

      Tack Miguel!

      Jag förstår med parameter all kompletterande information som levereras till ett program, en funktion eller ett system. Eftersom detta kan vara besvärligt, låt mig svara dig med några exempel.

      I linux-kommandot för att kopiera filen a.txt till filen b.txt skulle vi skriva följande:

      $cp a.txt b.txt

      CP-programmet här får två parametrar som är namnen på två filer, den första (måste finnas) a.txt och den andra b.txt.

      Ett annat exempel: Om du skickar för att skriva ut från konsolen med kommandot

      $ lp file.pdf

      I det här fallet är "file.pdf" en parameter för lp-programmet.

      Jag hoppas att jag har uppfyllt dina tvivel.

      hälsningar

  2.   miguel sade

    Mina kommentarer kommer inte ut, det är en brist på respekt, jag återvänder inte till detta forum igen.

    1.    Platshållarbild för Pedro Ruiz Hidalgo sade

      Jag vet inte vad som har hänt, det har i alla fall publicerats.

      Hälsningar.