De vreemd genoemde "hier documenten" laat u invoer / uitverwijderingen in de bash-scripts op Linux gebruiken. Ze zijn een geweldige manier om opdrachten te automatiseren die je nodig hebt om op een externe computer te lopen.
Hier documenten
Veel commando's in Linux hebben twee of drie letternamen. Dit is deels wat aanleiding geeft tot het idee dat Linux moeilijk is om te leren en vol met arcane-opdrachten. Maar een van de raarste namen in Linux is niet een van de cryptisch korte. "Hier documenten" zijn geen documenten, en het is niet echt duidelijk wat de "hier" verwijst, ook.
Ze zijn een relatief obscure construct, maar ze zijn handig. Natuurlijk is dit Linux, dus er is meer dan één manier om een kat te hinderen. Sommige van de hier verstrekte functionaliteit kunnen op andere manieren worden gereproduceerd. Die alternatieve methoden zijn meestal gecompliceerder. In programmering en scripting betekent "meer gecompliceerder" ook "meer vatbaar voor bugs" en dat uw code moeilijker is om te onderhouden.
WAAR HIER DOCUMENTEN ECHT EXCEL is Excel in de automatisering van opdrachten die u naar een externe computer wilt verzenden vanuit een verbinding van binnen een script. Het maken van de verbinding is eenvoudig, maar zodra de verbinding is gemaakt, hoe kunt u uw opdrachten "pompen" van uw script in de shell op de externe computer? Hiermee kunt u dat heel eenvoudig doen.
Basisbeginselen van hier documenten
De idiomatische weergave van een hier document ziet er als volgt uit:
Command & LT; & LT; limiet_string . . tekst gegevens variabelen . . limiet_string
-
OPDRACHT
: Dit kan een Linux-opdracht zijn die omgeleid ingang accepteert. Merk op
echoopdracht Accepteert niet omgeleid ingang . Als u naar het scherm moet schrijven, kunt u dekatopdracht, wat doet . - & lt; & lt; : De Operator van de omleiding.
- limiet_string : Dit is een label. Het kan zijn wat je wilt zolang het niet verschijnt in de lijst met gegevens die je in de opdracht wordt omgedraaid. Het wordt gebruikt om het einde van de tekst, gegevens en variabelenlijst te markeren.
- Gegevenslijst : Een lijst met gegevens die moet worden toegevoerd aan de opdracht. Het kan opdrachten, tekst en variabelen bevatten. De inhoud van de data-lijst wordt in de opdracht één regel tegelijk ingevoerd totdat de _limit_string wordt aangetroffen.
U zult waarschijnlijk voorbeelden van hier documenten zien die "EOF" gebruiken als de limietreeks. We zijn de voorkeur aan die aanpak. Het werkt, maar "EOF" betekent "Einde van het bestand". Afgezien van het zeldzame geval waar een thuisdocument het laatste is in een scriptbestand, wordt "EOF" ten onrechte gebruikt.
Het maakt uw scripts veel meer leesbaar als u een limietreeks gebruikt die verwijst naar wat u doet. Als u een reeks commando's naar een externe computer verzendt
Scheepvaart
(Ssh), een limietreeks genaamd iets als "_remote_commands" zou volkomen logisch zijn. Je hoeft ze niet te starten met een onderstrepingsteken "
_
" karakter. Dat doen we omdat het ze markeert als iets buitengewoons in je script.
Eenvoudige voorbeelden
U kunt hier documenten gebruiken op de opdrachtregel en in scripts. Wanneer u het volgende in een terminalvenster typt, ziet u een "
& GT;
"LINE VERVOLGING VRAGEN Telkens wanneer u op" Enter "drukt" Wanneer u de limietreeks "_END_OF_TEXT" typt en druk op "ENTER", wordt de lijst met websites doorgegeven aan
kat,
en ze worden weergegeven in het terminalvenster.
CAT & LT; & LT; _end_of_text How-to Geek Beoordeling Geek Lifesavvy Cloudsavvy het Mindbounce _end_of_text
Dat is niet de meest de moeite waard om oefeningen, maar het toont aan dat niets naar het commando wordt gestuurd totdat de volledige lijst met gegevens wordt verzameld en de limietreeks wordt aangetroffen. De
kat
Opdracht ontvangt geen invoer totdat u de limietreeks "_end_of_text" invoert en druk op de toets "Enter".
We kunnen hetzelfde in een script doen. Typ of kopieer dit voorbeeld in een editor, sla het bestand op als "Heredoc-1.SH" en sluit de editor.
#! / Bin / bash CAT & LT; & LT; "_end_of_text" Uw gebruikersnaam is: $ (whoami) Uw huidige werkmap is: $ PWD Je bash-versie is: $ Bash_version _end_of_text
Zoals u dit artikel volgt, moet u elke keer dat u een script maakt, dan moet u
maak het uitvoerbaar
voordat het wordt uitgevoerd. In ieder geval,
gebruik de
chmod
opdracht
. Vervang de naam van het script in elk voorbeeld voor de hier gebruikte scriptnaam.
CHMOD + X HEREDOC-1.SH
Dit script bevat twee omgevingsvariabelen,
$ Pwd
en
$ Bash_version
. De variabele namen van het milieu worden vervangen door hun gegevenswaarden - de huidige werkdirectory en de versie van bash-wanneer het script wordt uitgevoerd.
Het script gebruikt ook
opdrachtvervanging
Aan
de
wie ben ik
opdracht
. De naam van de opdracht wordt vervangen door zijn eigen uitvoer. De uitvoer van het volledige script is door de CAT-opdracht naar het Terminal-venster geschreven. We lopen het script door het op naam te roepen:
./ Heredoc-1.SH
Als u het script aanpast en de limietreeks in de eerste regel van het hier document in aanhalingstekens wilt wikkelen "
"
", De data-lijst wordt doorgegeven aan het document-opdracht Verbatim. Variabele namen worden weergegeven in plaats van variabele waarden en opdrachtsubstitutie zal niet plaatsvinden.
#! / Bin / bash CAT & LT; & LT; - "_END_OF_TEXT" Uw gebruikersnaam is: $ (whoami) Uw huidige werkmap is: $ PWD Je bash-versie is: $ Bash_version _end_of_text
Handling Tab-tekens
Standaard worden tabparakters in uw data-lijst vastgehouden en geschreven naar het terminalvenster. Kopieer en sla dit voorbeeld op als "Heredoc-2.SH." Maak het uitvoerbaar gebruik met behulp van de
chmod
opdracht. Bewerk de ingesprongen lijnen om ervoor te zorgen dat ze een of twee tab-tekens hebben aan het begin van de regel in plaats van een reeks ruimtes.
#! / Bin / bash
CAT & LT; & LT; _end_of_text
Uw gebruikersnaam is: $ (whoami)
Uw huidige werkmap is: $ PWD
Je bash-versie is: $ Bash_version
_end_of_text
./ Heredoc-2.SH
De tabbladen worden naar het terminalvenster geschreven.
Door een dashboard toe te voegen "
-
"Naar de Operator Redirection-operator zal het document hieraan leidende tabletjes negeren. Bewaar dit voorbeeld als "Heredoc-3.SH" en maak het uitvoerbaar bestand.
#! / Bin / bash
CAT & LT; & LT; - _END_OF_TEXT
Uw gebruikersnaam is: $ (whoami)
Uw huidige werkmap is: $ PWD
Je bash-versie is: $ Bash_version
_end_of_text
./ Heredoc-3.SH
De tabbladen worden genegeerd. Dit lijkt misschien triviaal, maar het is een nette manier om met leidende tabbladen om te gaan als gevolg van ingesprongen secties van scripts.
Loops en andere logische constructen zijn meestal ingesprongen. Als uw hier document is ingesloten in een ingesprongen gedeelte van een script, met behulp van een dashboard "
-
"Met de Operator Redirection verwijdert de opmaakproblemen die worden veroorzaakt door het toonaangevende tabletsen.
#! / Bin / bash als het waar is; dan CAT & LT; & LT; - _limit_string Regel 1 met een toonaangevend tabblad. Regel 2 met een toonaangevend tabblad. Lijn 3 met een toonaangevend tabblad. _limit_string fi
Doorverwijzing naar een bestand
De uitvoer van de opdracht die wordt gebruikt met het HIER-document kan in een bestand worden omgeleid. Gebruik de "
& GT;
"(Maak het bestand) of"
& GT; & GT;
"(Maak het bestand als het niet bestaat, voegt u toe aan het bestand als deze doet) Operirectorators
na
de limietreeks in de eerste regel van het hier document.
Dit script is "Heredoc-4.SH." Het zal zijn uitvoer doorverwijzen naar een tekstbestand genaamd "session.txt."
#! / Bin / bash CAT & LT; & LT; _end_of_text & gt; session.txt Uw gebruikersnaam is: $ (whoami) Uw huidige werkmap is: $ PWD Je bash-versie is: $ Bash_version _end_of_text
./ Heredoc-4.SH
CAT SESSIE.TEXT
De uitvoer naar een andere opdracht leidt
De uitvoer van de opdracht die in een hier wordt gebruikt, kan worden gepipperd als de invoer naar een andere opdracht. Gebruik maken van
de pijp "
|
"Operator
na
de limietreeks in de eerste regel van het hier document. We gaan de output uit de functie hier document pijpen,
kat
, naar binnen
sed
. Wij willen
Vervang alle gebeurtenissen
van de letter “a” met de letter “e”.
Noem dit script “heredoc-5.sh.”
#! / Bin / bash CAT & LT; & LT; _end_of_text | sed 's / a / e / g' Hoe Tot Gaak _end_of_text
./ heredoc-5.sh
“Gaak” is gecorrigeerd “Geek.”
Het verzenden van parameters aan een functie
De opdracht die wordt gebruikt met een hier document kan een functie in het script.
Dit script geeft een aantal gegevens van het voertuig in een functie. De functie leest de gegevens alsof het in door een gebruiker had getypt. De waarden van de variabelen worden vervolgens afgedrukt. Sla dit script als “heredoc-6.sh”.
#! / Bin / bash
# Het set_car_details () functie
set_car_details ()
{
leesbaar maken
read model
lees new_used
read delivery_collect
read locatie
read prijs
}
# De hier document dat de gegevens naar set_car_details passeert ()
set_car_details & lt; & lt; _mars_rover_data
NASA
doorzettingsvermogen Rover
Gebruikt
Verzamelen
Mars (lang, lat) 77.451865,18.445161
2,2 miljard
_mars_rover_data
# Haal de voertuiggegevens
echo "Merk: $ make"
echo "Model: $ model"
echo "Nieuw of Gebruikt: $ new_used"
echo "Delivery of Collection: $ delivery_collect"
echo "Location: $ locatie"
echo "Prijs \ $: $ price"
./ heredoc-6.sh
De voertuiggegevens worden geschreven naar de terminal venster.
Maken en verzenden van een e-mail
We kunnen hier document gebruiken maken en verzenden van een e-mail. Merk op dat we de parameters kunnen doorgeven aan het commando in de voorkant van de omleiding operator. Waren
met behulp van de Linux
mail
opdracht
tot
stuur dan een e-mail via de lokale mailsysteem
aan de gebruiker met de naam “dave”. De
-s
optie (onder voorbehoud) stelt ons in staat om het onderwerp van de e-mail op te geven.
Dit voorbeeld vormen script “heredoc-7.sh.”
#! / Bin / bash article = "Hier Documents" mail -s 'Workload status' Dave & lt; & lt; _projectrapport User name: $ (whoami) Heeft voltooide opdracht: Artikel: article $ _project_report
./ heredoc-7.sh
Er is geen zichtbare output van dit script. Maar toen we onze mail te checken, zien we dat de e-mail was samengesteld, verzonden, en afgeleverd.
Met behulp Hier Documenten met SSH
Hier documenten zijn een krachtige en handige manier om een aantal opdrachten uit te voeren op een externe computer zodra een SSH-verbinding tot stand is gebracht. Als u hebt ingesteld SSH-sleutels tussen de twee computers, zal het login proces volledig automatisch. In deze snelle en vuile voorbeeld, wordt u gevraagd om het wachtwoord voor de gebruikersaccount op de externe computer.
Dit script is “heredoc-8.sh”. We gaan verbinding met een externe computer met de naam “remote-pc”. De gebruikersaccount heet “dave”. We gebruiken de
-T
optie (disable pseudo-terminal toewijzing) omdat we niet een interactief pseudo-terminal worden toegewezen aan ons nodig heeft.
In de “doe wat werk hier” sectie van het script, konden we een lijst met commando's passeren, en deze zou worden uitgevoerd op de externe computer. Natuurlijk kan je gewoon bellen een script dat was op de externe computer. De afstandsbediening script kan alle commando's en routines die je wilt hebben geoefend te houden.
Het enige dat ons script-heredoc-8.sh-gaat doen is werken een verbinding log op de externe computer. De gebruikersaccount en een tijd en datum worden vastgelegd in een tekstbestand.
#! / Bin / bash ssh -T [email protected] & lt; & lt; _remote_commands # Doen wat werk hier #-Update verbinding log echo $ USER "-" $ (datum) & gt; & gt; /home/dave/conn_log/script.log _remote_commands
Toen we de opdracht uit te voeren, zijn we gevraagd om het wachtwoord voor de account op de op afstand computer.
./ heredoc-8.sh
Wat informatie over de computer op afstand wordt weergegeven, en we zijn terug naar de opdrachtprompt.
Op de
op afstand
computer, kunnen we gebruik maken van
kat
om de verbinding te bekijken:
cat conn_log / script.log
Elke verbinding wordt vermeld voor ons.
VERWANT: Hoe SSH-toetsen van de Linux Shell te maken en te installeren
Vreemde naam, leuke features
Hier zijn documenten eigenzinnig maar krachtig, vooral wanneer het wordt gebruikt om opdrachten naar een externe computer te verzenden. Het zou een eenvoudige zaak zijn om een back-uproutine te script met behulp van
rsync
. Het script kan vervolgens verbinding maken met de externe computer, controleer de resterende opslagruimte en stuurt u een waarschuwingsmail als de ruimte laag werd.
VERWANT: Hoe maak je een back-up van je Linux-systeem met rsync