nl.phhsnews.com


nl.phhsnews.com / De beginnershandleiding voor shell-scripting: basisprincipes

De beginnershandleiding voor shell-scripting: basisprincipes


De term 'shell-scripting' wordt vaak genoemd in Linux-forums, maar veel gebruikers zijn er niet mee vertrouwd. Als u deze eenvoudige en krachtige programmeermethode leert, kunt u tijd besparen, de opdrachtregel beter leren kennen en saaie taken voor bestandsbeheer verwijderen.

Wat is Shell-scripting?

Linux-gebruiker zijn betekent dat u met de opdracht speelt lijn. Leuk vinden of niet, er zijn slechts enkele dingen die veel gemakkelijker worden gedaan via deze interface dan door te wijzen en te klikken. Hoe meer u gebruikt en leert de opdrachtregel, hoe meer u ziet zijn potentieel. Nou, de opdrachtregel zelf is een programma: de shell. De meeste Linux-distro's gebruiken tegenwoordig Bash, en dit is waar je echt commando's in invoert.

Nu, sommigen van jullie die Windows gebruikten voordat ze Linux gebruikten, kunnen zich misschien batch-bestanden herinneren. Dit waren kleine tekstbestanden die u kon vullen met uit te voeren opdrachten en Windows zou ze om de beurt uitvoeren. Het was een slimme en nette manier om dingen gedaan te krijgen, zoals het uitvoeren van spellen in je computerlokaal op de middelbare school als je geen systeemmappen kon openen of snelkoppelingen kon maken. Batch-bestanden in Windows, hoewel handig, zijn een goedkope imitatie van shell-scripts.

Shell-scripts stellen ons in staat om commando's in ketens te programmeren en het systeem uit te voeren als een scripted evenement, net als batch-bestanden. Ze laten ook veel nuttiger functies toe, zoals opdrachtvervanging. U kunt een opdracht oproepen, zoals datum, en de uitvoer gebruiken als onderdeel van een schema voor bestandsnaamgeving. U kunt back-ups automatiseren en voor elk gekopieerd bestand kan de huidige datum worden toegevoegd aan het einde van de naam. Scripts zijn ook niet alleen aanroepingen van opdrachten. Het zijn programma's op zich. Met scripting kunt u programmeerfuncties gebruiken - zoals 'for' loops, if / then / else-opdrachten, enzovoort - rechtstreeks in de interface van uw besturingssysteem. En je hoeft geen andere taal te leren omdat je gebruikt wat je al weet: de commandoregel. Dat is echt de kracht van scripting, denk ik. Je kunt programmeren met opdrachten die je al kent, terwijl je nietjes leert van de meeste belangrijke programmeertalen. Moet u iets repetitief en vervelend doen? Script het! Een sneltoets nodig voor een echt ingewikkeld commando? Script het! Wil je een heel eenvoudig te gebruiken command-line interface voor iets bouwen? Script it!

Voordat u begint

Voordat we aan onze scripting-serie beginnen, laten we wat basisinformatie bespreken. We zullen de bash-shell gebruiken, die de meeste Linux-distributies native gebruiken. Bash is ook beschikbaar voor Mac OS-gebruikers en Cygwin voor Windows. Omdat het zo universeel is, zou je in staat moeten zijn om te scripten, ongeacht je platform. Bovendien, zolang alle opdrachten waarnaar wordt verwezen bestaan, kunnen scripts op meerdere platforms werken, met weinig tot geen aanpassingen.

Scripting kan eenvoudig gebruik maken van "beheerders" of "superuser" -rechten, dus het is het beste om test scripts uit voordat u ze aan het werk zet. Gebruik ook uw gezond verstand, zoals ervoor zorgen dat u een back-up hebt van de bestanden waarop u een script wilt uitvoeren. Het is ook erg belangrijk om de juiste opties te gebruiken, zoals -i voor de opdracht rm, zodat uw interactie vereist is. Dit kan enkele vervelende fouten voorkomen. Lees dus scripts die u downloadt en wees voorzichtig met uw gegevens, voor het geval er iets misgaat.

In essentie zijn scripts gewoon tekstbestanden. Je kunt elke teksteditor gebruiken om ze te schrijven: gedit, emacs, vim, nano ... Deze lijst gaat maar door. Zorg ervoor dat u het opslaat als gewone tekst, niet als rijke tekst of als Word-document. Omdat ik hou van het gebruiksgemak dat nano biedt, zal ik dat gebruiken.

Scriptmachtigingen en -namen

Scripts worden uitgevoerd als programma's en om dit te laten gebeuren, moeten ze de juiste rechten hebben. U kunt scripts uitvoerbaar maken door de volgende opdracht uit te voeren:

chmod + x ~ / somecrazyfolder / script1

Hiermee kan iedereen dat specifieke script uitvoeren. Als u het gebruik ervan wilt beperken tot alleen uw gebruiker, kunt u dit in plaats daarvan gebruiken:

chmod u + x ~ / somecrazyfolder / script1

Om dit script te kunnen uitvoeren, zou u naar de juiste map moeten gaan en het script als volgt uitvoeren:

cd ~ / somecrazyfolder

./ script1

Om dingen gemakkelijker te maken, kunt u scripts in een "bin" -map in uw basismap plaatsen:

~ / bin

In veel moderne distro's wordt deze map niet meer standaard aangemaakt, maar u kunt wel het. Dit is meestal waar uitvoerbare bestanden worden opgeslagen die bij uw gebruiker horen en niet bij andere gebruikers. Door scripts hier te plaatsen, kunt u ze gewoon uitvoeren door hun naam te typen, net als andere opdrachten, in plaats van dat u rondschuift en het voorvoegsel './' gebruikt.

Voordat u een script een naam geeft, moet u het volgende doen: commando om te controleren of je een programma geïnstalleerd hebt dat die naam gebruikt:

welke [opdracht]

Veel mensen noemen hun vroege scripts "testen", en wanneer ze proberen het in de opdrachtregel uit te voeren, niets gebeurt. Dit komt omdat het conflicteert met de testopdracht, die niets zonder argumenten doet. Zorg er altijd voor dat uw scriptnamen niet in strijd zijn met opdrachten, anders kunt u merken dat u dingen doet die u niet van plan bent te doen!

Richtlijnen voor scripts

Zoals ik al zei, is elk scriptbestand hoofdzakelijk platte tekst. Dat betekent echter niet dat je wel alles kunt schrijven wat je wilt. Wanneer een tekstbestand wordt geprobeerd te worden uitgevoerd, zullen shells ze doorzoeken voor aanwijzingen of ze scripts zijn of niet, en hoe alles op de juiste manier moet worden afgehandeld. Daarom zijn er enkele richtlijnen die u moet weten.

Elk script zou moeten zijn met "#! / Bin / bash"

  1. Elke nieuwe regel is een nieuw commando
  2. Commentaarregels beginnen met een #
  3. Opdrachten worden omringd door ()
  4. De Hash-Bang-hack

Wanneer een shell door een tekstbestand parseert, is de meest directe manier om het bestand als een script te identificeren, door uw eerste regel te maken:

# ! / bin / bash

Vervang hier het pad als u een andere shell gebruikt. Commentaarregels beginnen met hashes (#), maar voegen het knal- (!) En het shell-pad toe nadat het een soort hack is die deze commentaregel zal omzeilen en het script zal dwingen om uit te voeren met de shell waarnaar deze regel verwijst.

Nieuwe regel = nieuwe opdracht

Elke nieuwe regel moet worden beschouwd als een nieuwe opdracht of als onderdeel van een groter systeem. Als / then / else-instructies bijvoorbeeld meerdere regels overnemen, staat elke component van dat systeem op een nieuwe regel. Laat een opdracht niet bloeden in de volgende regel, omdat dit de vorige opdracht kan afkappen en u een foutmelding krijgt op de volgende regel. Als uw teksteditor dat doet, moet u de tekstomslag uitschakelen om aan de veilige kant te blijven. U kunt tekstomloop uitschakelen in nano-bit op ALT + L.

Opmerking Vaak met #s

Als u een regel met een # begint, wordt de lijn genegeerd. Dit verandert het in een commentaarregel, waar je jezelf kunt herinneren aan wat de uitvoer van het vorige commando was, of wat het volgende commando zal doen. Schakel opnieuw tekstomloop uit of verbreek je reactie in meerdere regels die allemaal beginnen met een hash. Veel opmerkingen gebruiken is een goede gewoonte om te houden, omdat u en anderen uw scripts gemakkelijker kunnen aanpassen. De enige uitzondering is de eerder genoemde Hash-Bang-hack, dus volg #s met! S niet. ; -)

Opdrachten worden omringd door haakjes

In oudere dagen werden opdrachtvervangingen uitgevoerd met enkele maatstreepjes (', deelt de ~ -toets). We gaan dit nog niet aanraken, maar aangezien de meeste mensen erop uit gaan om na het leren van de basis te verkennen, is het waarschijnlijk een goed idee om te vermelden dat je in plaats daarvan haakjes moet gebruiken. Dit komt vooral omdat als je nesten - zet commando's in andere commando's - haakjes beter werken.

Je eerste script

Laten we beginnen met een eenvoudig script waarmee je bestanden kunt kopiëren en datums kunt toevoegen aan het einde van de bestandsnaam. Laten we het "datecp" noemen. Laten we eerst eens kijken of die naam in conflict is met iets:

Je kunt zien dat er geen uitvoer is van die opdracht, dus we staan ​​klaar om deze naam te gebruiken.

Laten we een leeg bestand maken in de ~ / bin map:

druk op ~ / bin / datecp

En laten we de toestemming nu wijzigen voordat we het vergeten:

Laten we beginnen met het maken van ons script. Open dat bestand in je teksteditor naar keuze. Zoals ik al zei, ik hou van de eenvoud van nano.

nano ~ / bin / datecp

En laten we doorgaan en de vereiste eerste regel invoegen en een opmerking plaatsen over wat dit script doet.

Vervolgens, laten we een variabele declareren. Als je ooit algebra hebt gebruikt, weet je waarschijnlijk wat dat is. Met een variabele kunnen we informatie opslaan en er dingen mee doen. Variabelen kunnen "uitvouwen" wanneer elders wordt verwezen. Dat wil zeggen, in plaats van hun naam te tonen, zullen ze hun opgeslagen inhoud weergeven. Je kunt later diezelfde variabele vertellen om verschillende informatie op te slaan, en elke instructie die daarna plaatsvindt, zal de nieuwe informatie gebruiken. Het is echt een mooie tijdelijke aanduiding.

Wat zullen we variabel maken? Laten we de datum en tijd opslaan! Hiertoe gebruiken we de datumopdracht.

Bekijk de onderstaande schermafbeelding voor het maken van de uitvoer van de datumopdracht:

U kunt dat zien door verschillende variabelen toe te voegen die beginnen met%, u kunt de uitvoer van de opdracht wijzigen in wat u wilt. Voor meer informatie, kunt u de handleidingpagina voor de datumopdracht bekijken.

Laten we die laatste iteratie van de datumopdracht gebruiken, "datum +% m_% d_% y-% H.% M.% S", en gebruik dat in ons script.

Als we dit script nu zouden opslaan, zouden we het kunnen uitvoeren en zou het ons de uitvoer van het datumcommando geven zoals we zouden verwachten:

Maar laten we iets anders doen. Laten we een variabele naam geven, zoals date_formatted bij deze opdracht. De juiste syntaxis hiervoor is als volgt:

variable = $ (command-options arguments)

En voor ons zouden we het zo bouwen:

date_formatted = $ (date +% m_% d_% y-% H.% M.% S)

Dit noemen we opdrachtvervanging. In feite vertellen we bash dat wanneer de variabele "date_formatted" verschijnt, de opdracht tussen de haakjes wordt uitgevoerd. Vervolgens moet de output van de opdrachten worden weergegeven in plaats van de naam van de variabele, "date_formatted".

Hier is een voorbeeldscript en de uitvoer ervan:

Let op: er zijn twee spaties in de uitvoer. De ruimte tussen de aanhalingstekens van de echo-opdracht en de spatie voor de variabele worden beide weergegeven. Gebruik geen spaties als u niet wilt dat ze worden weergegeven. Merk ook op dat zonder deze toegevoegde "echo" -regel het script absoluut geen uitvoer zou geven.

Laten we teruggaan naar ons script. Laten we vervolgens het kopieergedeelte van de opdracht toevoegen.

cp -iv $ 1 $ 2. $ date_formatted

Dit zal de kopieeropdracht oproepen, met de -i en -v opties. De eerste zal u om verificatie vragen voordat u een bestand overschrijft, en de laatste zal weergeven wat er op de opdrachtregel staat.

Vervolgens kunt u zien dat ik de "$ 1" -optie heb toegevoegd. Bij het scripten zal een dollarteken ($) gevolgd door een nummer dat genummerde argument van het script aanduiden wanneer het werd opgeroepen. Bijvoorbeeld in het volgende commando:

cp -iv Trogdor2.mp3 ringtone.mp3

Het eerste argument is "Trogdor2.mp3" en het tweede argument is "ringtone.mp3".

Terugkijkend op onze script kunnen we zien dat we verwijzen naar twee argumenten:

Dit betekent dat wanneer we het script uitvoeren, we twee argumenten moeten opgeven om het script correct te laten werken. Het eerste argument, $ 1, is het bestand dat wordt gekopieerd en wordt vervangen door het eerste argument van het "cp -iv" -commando.

Het tweede argument, $ 2, fungeert als het uitvoerbestand voor dezelfde opdracht. Maar je kunt ook zien dat het anders is. We hebben een punt toegevoegd en we hebben van bovenaf verwezen naar de variabele 'date_formatted'. Benieuwd wat dit doet?

Dit is wat er gebeurt als het script wordt uitgevoerd:

U kunt zien dat het uitvoerbestand wordt vermeld als wat ik heb ingevoerd voor $ 2, gevolgd door een punt en vervolgens de uitvoer van het datumcommando ! Klopt, toch?

Nu, wanneer ik de opdracht datecp voer, zal dit dit script uitvoeren en kan ik elk bestand naar een nieuwe locatie kopiëren en automatisch de datum en tijd toevoegen aan het einde van de bestandsnaam. Handig voor het archiveren van dingen!

Shell-scripting vormt de kern van het feit dat uw besturingssysteem voor u werkt. Je hoeft geen nieuwe programmeertaal te leren om dit te laten gebeuren. Probeer scripting met enkele basiscommando's thuis en begin te bedenken waar je dit voor kunt gebruiken.


Script jij? Heb je een advies voor nieuwkomers? Deel uw mening in de comments! Er komt nog meer in deze serie!


Het scherm van je Android-telefoon gemakkelijk spiegelen op je pc met Vysor voor Chrome

Het scherm van je Android-telefoon gemakkelijk spiegelen op je pc met Vysor voor Chrome

Smartphones zijn handig, maar soms zijn het meer problemen dan het loont om je telefoon op te nemen als je al zit op een computer. Het zou leuk zijn om vanuit het gemak van je pc te doen wat je wilt, vooral als je aan een bureau werkt. Gelukkig is er een eenvoudige (en briljante) manier om het scherm van je Android-apparaat volledig via USB te mirroren met een Chrome-app met de naam Vysor .

(how-to)

Tether een iPhone of iPad omkeren naar uw pc of Mac

Tether een iPhone of iPad omkeren naar uw pc of Mac

Standaard "tethering" houdt in dat u uw telefoon, tablet of ander apparaat op uw smartphone aansluit en de mobiele gegevensverbinding van uw smartphone deelt met je andere apparaten. Maar soms wilt u uw iPhone of iPad online krijgen via uw pc of Mac. Dit is vooral handig als u zich in een gebied met een lage signaalsterkte bevindt - misschien als u geen wifi-signaal hebt en alleen een Ethernet-verbinding voor u beschikbaar.

(how-to)