De mærkeligt navngivne "her dokumenter" giver dig mulighed for at bruge input / out omdirigering inde i bash scripts på Linux. De er en fantastisk måde at automatisere kommandoer, du skal køre på en fjerncomputer.
Her dokumenter
Mange kommandoer i Linux har to eller tre bogstavnavne. Dette er dels, hvad der giver anledning til tanken om, at Linux er svært at lære og fuld af Arcane-kommandoer. Men en af de mærkeligste navne i Linux er ikke en af de kryptisk korte. "Her er dokumenter" ikke dokumenter, og det er ikke rigtig klart, hvad "her" refererer til, enten.
De er en relativt uklart konstruktion, men de er nyttige. Dette er selvfølgelig Linux, så der er mere end en måde at skinne på en kat på. Nogle af de funktionalitet, der leveres her, kan reproduceres på andre måder. Disse alternative metoder er normalt mere komplicerede. I programmering og scripting betyder "mere kompliceret" også "mere tilbøjelige til bugs", og at din kode er sværere at opretholde.
Hvor her er dokumenter, er det virkelig Excel i automatiseringen af kommandoer, som du vil sende til en fjerncomputer fra en forbindelse etableret fra et script. Når forbindelsen er nemt, men når forbindelsen er foretaget, hvordan har du "din kommandoer fra dit script i skallen på fjerncomputeren? Her giver dig mulighed for at gøre det meget simpelt.
Grundlæggende principper herfra dokumenter
Den idiomatiske repræsentation af et her dokument ser sådan ud:
Command & Lt; & lt; limit_string. . . tekst data variabler. . . limit_string
-
KOMMANDO
: Dette kan være en hvilken som helst Linux-kommando, der accepterer omdirigeret input. Bemærk, The
ekkokommando accepterer ikke omdirigeret input . Hvis du har brug for at skrive til skærmen, kan du brugekatkommando, som gør . - & lt; & lt; : Omdirigeringsoperatøren.
- limit_string. : Dette er en etiket. Det kan være, hvad du vil, så længe det ikke vises på listen over data, du omdirigerer ind i kommandoen. Det bruges til at markere slutningen af tekst-, data- og variablerlisten.
- Data liste : En liste over data, der skal fodres til kommandoen. Det kan indeholde kommandoer, tekst og variabler. Indholdet af datalisten føres ind i kommandoen en linje ad gangen, indtil _limit_stringen opstår.
Du vil nok se eksempler på her dokumenter, der bruger "EOF" som grænsestrengen. Vi favoriserer ikke denne tilgang. Det virker, men "EOF" betyder "slutningen af filen". Bortset fra det sjældne tilfælde, hvor et hjemmedokument er det sidste i en scriptfil, bruges "EOF" fejlagtigt.
Det vil gøre dine scripts meget mere læsbare, hvis du bruger en grænsestreng, der refererer til, hvad du laver. Hvis du sender en række kommandoer til en fjerncomputer over
Secure Shell.
(SSH), en grænsestreng kaldet noget som "_remote_commands" ville gøre perfekt mening. Du behøver ikke at starte dem med en understregning "
_
" Karakter. Det gør vi fordi det markerer dem som noget ud over det sædvanlige i dit script.
Enkle eksempler.
Du kan bruge her dokumenter på kommandolinjen og i scripts. Når du skriver følgende i et terminalvindue, vil du se en "
& gt;
"Line Continuation Prompt hver gang du rammer" Enter. " Når du skriver grænsen "_end_of_text", og tryk "Enter", overføres listen over websteder til
kat,
og de vises i terminalvinduet.
CAT & LT; & lt; _end_of_text. How-to Geek Gennemgå Geek Lifesavvy. Cloudsavvy IT. Mindbounce. _end_of_text
Det er ikke det mest værd at udøve øvelser, men det viser, at intet sendes til kommandoen, indtil hele listen over data samles, og grænsestrengen opstår. Det
kat
Kommando modtager ikke nogen input, indtil du indtaster grænsestrengen "_end_of_text" og tryk på "Enter" -tasten.
Vi kan gøre det samme i et script. Skriv eller kopier dette eksempel i en editor, gem filen som "Heredoc-1.sh", og luk editoren.
#! / Bin / bash CAT & LT; & lt; "_end_of_text" Dit brugernavn er: $ (Whoami) Din nuværende arbejdskatalog er: $ PWD Din bash version er: $ bash_version _end_of_text
Når du følger denne artikel, skal du hver gang du opretter et script, skal du
Gør det eksekverbar
før det løber. I hvert tilfælde,
brug
chmod.
kommando
. Udskift navnet på scriptet i hvert eksempel på scriptnavnet, der bruges her.
CHMOD + X-Heredoc-1.sh
Dette script indeholder to miljøvariabler,
$ PWD.
og
$ Bash_version
. Miljøvariable navne erstattes af deres dataværdier - den aktuelle arbejdskatalog og den version af bash-når scriptet udføres.
Scriptet bruger også
kommandosubstitution
på
det
hvem er jeg
kommando
. Navnet på kommandoen erstattes af sin egen produktion. Udgangen fra hele scriptet er skrevet til terminalvinduet af CAT-kommandoen. Vi kører scriptet ved at kalde det ved navn:
./ Heredoc-1.sh
Hvis du ændrer scriptet og pakker grænsestrengen i den første linje i her-dokumentet i citatmærker "
"
"Datasallisten overføres til her Dokumentkommandoen Verbatim. Variable navne vises i stedet for variable værdier, og kommandosubstitution vil ikke finde sted.
#! / Bin / bash kat & lt; & lt; - "_end_of_text" Dit brugernavn er: $ (Whoami) Din nuværende arbejdskatalog er: $ PWD Din bash version er: $ bash_version _end_of_text
Håndtering Tab tegn.
Som standard bevares TAB-tegn i din dataliste og skrives til terminalvinduet. Kopier og gem dette eksempel som "Heredoc-2.Sh." Gør det eksekverbar ved hjælp af
chmod.
kommando. Rediger de indrykkede linjer for at sikre, at de har et eller to faneblad i starten af linjen i stedet for en række mellemrum.
#! / Bin / bash
CAT & LT; & lt; _end_of_text.
Dit brugernavn er: $ (Whoami)
Din nuværende arbejdskatalog er: $ PWD
Din bash version er: $ bash_version
_end_of_text
./ HEREDOC-2.SH
Tab'erne er skrevet til terminalvinduet.
Ved at tilføje en dash "
Rede -
"Til omdirigeringsoperatøren vil her-dokumentet ignorere førende faneblad. Gem dette eksempel som "Heredoc-3.sh" og gør det eksekverbart.
#! / Bin / bash
cat & lt; & lt; - _end_of_text
Dit brugernavn er: $ (Whoami)
Din nuværende arbejdskatalog er: $ PWD
Din bash version er: $ bash_version
_end_of_text
./ HEREDOC-3.SH
Tab'erne ignoreres. Dette kan virke trivielt, men det er en pæn måde at klare førende faner på grund af indrykkede sektioner af scripts.
Loops og andre logiske konstruktioner er normalt indrykket. Hvis dit her dokument er indeholdt i et indrykket afsnit af et script, ved hjælp af et dash "
Rede -
"Med omdirigeringsoperatøren fjerner formateringsproblemer forårsaget af de førende TAB-tegn.
#! / Bin / bash Hvis det er sandt; derefter Cat & Lt; & lt; - _limit_string Linje 1 med en førende fane. Linje 2 med en førende fane. Linje 3 med en førende fane. _limit_string. fi
Omdirigere til en fil
Udgangen fra den kommando, der bruges med her-dokumentet, kan omdirigeres i en fil. Brug "
& gt;
"(Opret filen) eller"
& gt; & gt;
"(Opret filen, hvis den ikke eksisterer, tilføj til filen, hvis den gør) omdirigeringsoperatører
efter
grænsestrengen i den første linje i her dokumentet.
Dette script er "Heredoc-4.sh." Det vil omdirigere sit output til en tekstfil kaldet "session.txt."
#! / Bin / bash CAT & LT; & lt; _end_of_text & gt; session.txt. Dit brugernavn er: $ (Whoami) Din nuværende arbejdskatalog er: $ PWD Din bash version er: $ bash_version _end_of_text
./ HEREDOC-4.SH
CAT SESSION.TEXT
Rør udgangen til en anden kommando
Udgangen fra kommandoen, der bruges i et her-dokument, kan røres som input til en anden kommando. Brug
røret "
|
"Operator.
efter
grænsestrengen i den første linje i her dokumentet. Vi skal rør udgangen fra kommandoen her.
kat
, ind i
sed.
. Vi vil gerne
erstatte alle forekomster
af bogstavet "A" med bogstavet "E".
Navngiv dette script "Heredoc-5.sh."
#! / Bin / bash CAT & LT; & lt; _end_of_text | sed 's / a / e / g' Hvordan Til GAAK. _end_of_text
./ HEREDOC-5.SH
"GAAK" korrigeres til "Geek".
Sende parametre til en funktion
Kommandoen, der bruges med et her dokument, kan være en funktion i scriptet.
Dette script passerer nogle køretøjsdata til en funktion. Funktionen læser dataene som om den var blevet indtastet af en bruger. Værdierne af variablerne udskrives derefter. Gem dette script som "Heredoc-6.sh".
#! / Bin / bash
# SET_CAR_DETAILS () funktionen
set_car_details ()
{
læs make.
Læs model
læs new_used
Læs Delivery_Collect.
læs placering
Læs prisen
}
# Her dokumentet, der passerer dataene til SET_CAR_DETAILS ()
set_car_details & lt; & lt; _MARS_ROVER_DATA.
Nasa.
Udholdenhed rover.
Brugt
Indsamle
Mars (lang, lat) 77.451865,18.445161
2,2 mia
_MARS_ROVER_DATA.
# Hent køretøjets detaljer
ekko "Make: $ make"
ECHO "Model: $ model"
ekko "Ny eller brugt: $ new_used"
ECHO "Levering eller indsamling: $ Delivery_collect"
ekko "Placering: $ placering"
ekko "pris \ $: $ pris"
./ HEREDOC-6.SH
Køretøjsoplysningerne er skrevet til terminalvinduet.
Oprettelse og sender en e-mail
Vi kan bruge et her dokument til at komponere og sende en e-mail. Bemærk, at vi kan passere parametre til kommandoen foran omdirigeringsoperatøren. Vi er
ved hjælp af Linux.
post
kommando
til
Send en email via det lokale postsystem
til brugerkontoen kaldet "Dave". Det
-S.
(Emne) Mulighed giver os mulighed for at angive emnet for e-mailen.
Dette eksempel danner script "heredoc-7.sh."
#! / Bin / bash Artikel = "Her dokumenter" Mail -s 'arbejdsbyrde status' Dave & Lt; & lt; _project_report. Brugernavn: $ (Whoami) Har afsluttet opgaven: Artikel: $ artiklen _project_report
./ HEREDOC-7.SH
Der er ingen synlig output fra dette script. Men når vi tjekker vores mail, ser vi, at e-mailen blev sammensat, afsendt og leveret.
Bruger her dokumenter med ssh
Her er dokumenter en stærk og bekvem måde at udføre nogle kommandoer på en fjerncomputer, når en SSH-forbindelse er etableret. Hvis du har oprettet SSH-nøgler mellem de to computere, vil loginprocessen være fuldautomatisk. I dette hurtige og beskidte eksempel bliver du bedt om adgangskoden til brugerkontoen på fjerncomputeren.
Dette script er "Heredoc-8.sh". Vi skal oprette forbindelse til en fjerncomputer kaldet "Remote-PC". Brugerkontoen hedder "Dave". Vi bruger
-T.
(Deaktiver Pseudo-terminal tildeling), fordi vi ikke har brug for en interaktiv pseudo-terminal, der skal tildeles til os.
I "Gør noget arbejde her" "af scriptet, kunne vi bestå en liste over kommandoer, og disse ville blive udført på den eksterne computer. Selvfølgelig kan du bare ringe til et script, der var på den eksterne computer. Fjern scriptet kunne holde alle de kommandoer og rutiner, du vil have udført.
Alt, hvad vores script-Heredoc-8.SH-vil gøre, er at opdatere en forbindelseslog på fjerncomputeren. Brugerkontoen og et tids- og datostempel er logget på en tekstfil.
#! / Bin / bash ssh -t [email protected] & lt; & lt; _remote_commands. # Gør noget arbejde herinde # Update Connection Log ekko $ bruger "-" $ (dato) & gt; & gt; /home/dave/conn_log/script.log. _remote_commands
Når vi kører kommandoen, bliver vi bedt om adgangskoden til kontoen på fjern computer.
./ HEREDOC-8.SH
Nogle oplysninger om fjerncomputeren vises, og vi returneres til kommandoprompten.
På den
fjern
computer, vi kan bruge
kat
For at kontrollere forbindelsesloggen:
CAT CONN_LOG / SCRIPT.LOG
Hver forbindelse er angivet for os.
RELATEREDE: Sådan oprettes og installerer SSH-nøgler fra Linux Shell
Mærkeligt navn, pæne funktioner
Her er dokumenter quirky, men kraftfulde, især når de bruges til at sende kommandoer til en fjerncomputer. Det ville være et simpelt spørgsmål at script en backup rutine ved hjælp af
rsync.
. Scriptet kunne derefter oprette forbindelse til fjernbetjeningen, kontrollere det resterende lagerplads og sende en advarsels-e-mail, hvis pladsen blev lavt.
RELATEREDE: Sådan sikkerhedskopieres dit Linux-system med RSYNC