Manus

Begrepet skript , i informatikk , betegner en bestemt type program , skrevet i en bestemt klasse programmeringsspråk , kalt skriptspråk . En spesifikk klasse av disse programmene er de såkalte shell-skriptene , dvs. skript som er utformet for å kjøres innenfor et skall i et operativsystem

Beskrivelse

Skillet mellom et normalt program og et skript er ikke entydig, men generelt kan følgende egenskaper identifiseres i skript:

Shell script

Skallskriptet identifiserer et skript for et tekstlig skall til et operativsystem , det vil si kommandolinjegrensesnittet , hvis språk anses som et enkelt programmeringsspråk for et gitt domene. Et slikt skript utfører vanligvis systemadministrasjonsrelaterte oppgaver som filmanipulering (f.eks. gi nytt navn, kopiering eller flytting), kjøring av andre programmer, utskrift og tekstmanipulering. Den viktigste og mest utnyttede fordelen sammenlignet med direkte interaksjon med skallet ved å skrive den ene kommandoen etter den andre, er automatisering, dvs. muligheten til å definere, en gang for alle gjennom skriptet, en serie med spesielt like operasjoner eller som kan karakteriseres i en sofistikert måte. På denne måten frigjør skrivingen av et manus forfatteren, i rekkefølge, fra kjedsomheten ved gjentakelse eller fra behovet for å huske visse detaljer, og etterlater ham den enkle byrden med å utføre det.

Selv om mange shell- språktolker har kommandolinjegrensesnitt, for eksempel ulike Unix-lignende system-skall (f.eks . Bash , C-shell , Zsh , Debian Almquist ), eller Windows -skall ( PowerShell , cmd. exe eller command.com ), flere andre språk, som AppleScript eller Windows Script Host (WScript.exe), ikke har dem. Andre bemerkelsesverdige eksempler på skallspråk primært beregnet for å skrive skript er Digital Command Language ( DCL ) til DEC -systemer eller Job Control Language ( JCL ) til IBM -systemer .

Fordeler og ulemper

Ofte er det mye raskere å skrive et skallskript enn å skrive tilsvarende kode på andre programmeringsspråk. De mange fordelene inkluderer enkelt program eller filvalg, rask start og interaktiv feilsøking. Et shell-script kan brukes til å gi en sekvens og kobling til beslutningstaking rundt eksisterende programmer, og for moderat store skript er fraværet av et kompileringstrinn en fordel. Tolkende kjøring gjør det enkelt å skrive feilsøkingskode i et skript og også kjøre på nytt ved å oppdage og fikse feil. Ikke-ekspertbrukere kan bruke skript for å tilpasse programmets virkemåte, og shell-skript gir noen begrensede multiprosesseringsmuligheter .

På den annen side er shell-scripting utsatt for kostbare feil. Utilsiktede skrivefeil som rm -rf * /(i stedet for forventet rm -rf */) er folklore i Unix-fellesskapet, en enkelt ekstra plass konverterer kommandoen fra en som sletter alle underkataloger til en som sletter alle og også prøver å slette all rotpartisjon . Lignende problemer kan bli cptil mvfarlige våpen, og misbruk >kan slette innholdet i en fil. Dette gjøres mer problematisk av det faktum at mange Unix-kommandoer er forskjellige i navn med bare én bokstav : cp,, cn.cd

En annen betydelig ulempe er den langsomme utførelseshastigheten og behovet for å starte en ny prosess for nesten alle skallkommandoer som utføres. Når skriptet er en jobb, kan det oppnås ved å lage en pipeline der et effektivt kommandofilter gjør det meste av arbeidet, og reduserer nedgangen; men et komplekst skript er vanligvis flere størrelsesordener langsommere enn et konvensjonelt kompilert program som utfører en tilsvarende operasjon. Det er også kompatibilitetsproblemer mellom ulike plattformer. Larry Wall , skaperen av Perl , skrev at " Det er lettere å portere et skall enn et skallskript ".

På samme måte kan mer komplekse skript kjøres innenfor grensene til selve shell-skriptspråket; Disse begrensningene gjør det vanskelig å skrive kvalitetskode på grunn av utvidelsene til ulike skall. Faktisk, hvis du tenkte på å løse skallproblemer med det originale skallspråket, kan du skape uventede verre problemer.

Mange ulemper ved å bruke noen skriptspråk er forårsaket av designfeil i språket eller implementeringssyntaksen, og er ikke nødvendigvis pålagt ved å bruke en grunnleggende tekstkommandolinje, det er en rekke skjell som bruker andre shell-programmeringsspråk eller til og med ekte Scsh-språk (som bruker Scheme ).

Funksjoner

Tastatursnarveier

I sin enkleste form kan et skallskript gi en praktisk variant av en systemkommando der bestemte miljøinnstillinger, kommandoalternativer eller etterbehandlingsalternativer brukes automatisk, men på en måte som lar det nye skriptet fortsatt fungere som et normalt Unix kommando.

Et eksempel kan være å lage en ny versjon av ls , kommandoen for å liste filer (gir den et kommandonavn som er kortere enn l), som vanligvis lagres i en binbrukerkatalog som:, / home / nomeutente / bin / log en forhåndsgitt og standard kommandoalternativer.

#! / bin / sh LC_COLLATE = C ls -FCas " $ @ "

Her indikerer første linje (Shebang) hvilken tolk som skal brukes for å utføre resten av skriptet, andre linje lager en liste med alternativer for filformatindikatorer, kolonner, alle filer (ingen utelatt) og størrelse i blokker. LC_COLLATE=Cbruker som standard sorteringsrekkefølge for store og små bokstaver, og "$@"fører til at alle parametere som er gitt lsendes som ls-parametere, slik at alle normale alternativer og syntaks som er kjent for ls fortsatt kan brukes.

Brukeren må derfor enkelt kunne bruke lfor vanlige kortere lister.

Batchjobber

Shell-skript lar mange kommandoer som må legges inn manuelt i et kommandolinjegrensesnitt utføres automatisk, og uten at brukeren trenger å vente med å aktivere hvert trinn i sekvensen. For eksempel, i en katalog med tre C-kildekodefiler, i stedet for manuelt å utføre de fire kommandoene som trengs for å bygge det endelige programmet, kan du i stedet lage et C-shell -skript, kalt bygget og lagret i katalogen sammen med dem, som kompilerer dem automatisk:

#! / bin / csh ekko kompilering ... cc -c foo.c cc -c bar.c cc -c qux.c cc -o myprog foo.o bar.o qux.o ekko gjort .

Skriptet skal tillate en bruker å lagre filen som redigeres, sette editoren på pause, kjøre den gjennom kommandoen . / buildfor å lage det oppdaterte programmet, teste den og deretter gå tilbake til editoren. Siden 1980 har imidlertid slike skript blitt erstattet med verktøy som make , som er spesialisert for "bygge"-programmer. Når vi skriver inn en kommando (som vi vil kalle jobb for å skille den fra prosesser) og trykker på "enter"-tasten, blir den utført, men ettersom vi har drevet input og output, kan vi også kontrollere utførelsen. Noen kommandoer er komplekse, og hvis de kjøres, vil de forhindre at skallet blir brukt før det er fullført. Du kan deretter starte kommandoen i bakgrunnen og ha skallet fritt igjen for annen bruk; du kan ringe kommandoen i forgrunnen eller suspendere eller avbryte den. For å utføre kommandoen i bakgrunnen, sett inn "&"-tegnet på slutten av kommandoen. Hvis vi ønsket å skrive ut filen prova.txt i bakgrunnen ville det være nok å gi kommandoen lpr prova.txt &. Operativsystemet tildeler et unikt nummer til jobben og starter den ved å merke den med et "+"-tegn (aktiv jobb).

Hvis vi starter en ny kommando, vil den bli tildelt neste nummer og merket med "-"-tegnet (venter på utførelse). For å se hvilke og hvor mange jobber som kjører, bare gi jobbkommandoen, og få den relative utgangen. Du kan deretter la kommandoen gå tilbake til forgrunnen ved å bruke fg-kommandoen etterfulgt av "%"-tegnet og jobbnummeret. For eksempel, hvis du vil ha den andre kommandoen i forgrunnen, skriver du fg% 2. Kommandoen vil ikke kunne gå tilbake til bakgrunnen før den er ferdig. Det er imidlertid mulig å omgå denne begrensningen ved å suspendere jobben med tastekombinasjonen "CTRL Z" og starte den på nytt med fg eller bg. En avsluttet kommando vil ikke varsle brukeren om avslutningen av arbeidet med mindre det er eksplisitt indikert via notify% 1 (i dette tilfellet advarer den om avslutningen av den første kommandoen). Til slutt er det mulig å tvangsavbryte kommandoen hvis den for eksempel går inn i en uendelig sløyfe. Linux gir kill-kommandoen etterfulgt av nummeret som identifiserer jobben (f.eks. % 1).

Generalisering

Enkle batchprosesser er ikke uvanlig for isolerte oppgaver, men bruken av skallløkker, tester og variabler gir brukerne mye mer fleksibilitet. En bash (Bourne-Again shell script) konverterer JPEG -bilder til PNG , og gir bildenavnene på kommandolinjen - muligens via jokertegn - i stedet for å være oppført i skriptet, hvor du kan lage denne filen, vanligvis lagret som/home /nomeutente/bin/jpg2png

#! / bin / bash for jpg i " $ @ " ; gjør # bruk $ jpg i stedet for hvert filnavn som er gitt, i sin tur png = " $ { jpg % .jpg } .png" # finn PNG-versjonen av filnavnet ved å erstatte .jpg med .png ekkokonvertering " $ jpg " .. # output status info til brukeren som kjører skriptet hvis convert " $ jpg " jpg.to.png ; deretter # bruk konverteringsprogrammet (vanlig i Linux) for å lage PNG i en midlertidig fil mv jpg.to.png " $ png " # hvis det fungerte, gi nytt navn til det midlertidige PNG-bildet til riktig navn ellers # ... klag ellers og gå ut av skriptet ekko 'feil: mislykket utdata lagret i "jpg.to.png".' 1 > & 2 exit 1 fi # slutten av "hvis"-testkonstruksjonen utført # slutten av "for"-løkken ekko alle konverteringer vellykket # fortell brukeren de gode nyhetene

jpg2png-kommandoen kan deretter kjøres på en hel katalog full av JPEG-bilder med barejpg2png *.jpg

Sannferdighet

En nøkkelfunksjon ved shell-skript er at påkallingen av tolkene deres håndteres som en kjernefunksjon i operativsystemet. Dermed brukerskallet i stedet for bare å kunne utføre shell-språkskript, eller et skript som bare har tolkedirektivet håndtert riktig hvis det ble kjørt fra et skall, (begge var begrensninger i de første årene av shell-skriptet Bourne-Again-skriptet ), initialiseres og kjøres skallskriptet av selve operativsystemet. Et moderne skallskript kan ikke plasseres på samme nivå som systemkommandoer, men mange systemkommandoer er faktisk skallskript (eller mer generelt, skript, siden noen av dem ikke tolkes av et skall. men i stedet fra skriptspråk som f.eks. : Perl , Python eller andre språk). Dette gjelder også for returavslutningskoder som for eksempel andre systemverktøy for å indikere suksess eller fiasko, slik at de kan identifiseres som komponenter i store programmer uavhengig av hvordan disse større verktøyene implementeres.

I likhet med standard systemkommandoer utelater skallskript klassisk alle typer filtype med mindre de er ment å leses i et skall som kjører gjennom en spesiell mekanisme dedikert til dette formålet (for eksempel: sh's "." , eller csh's source).

Programmering

Mange moderne skall gir også forskjellige funksjoner som normalt bare er tilgjengelige ved bruk av mer sofistikerte generelle programmeringsspråk , for eksempel konstruksjonsflytkontroll, variabler, kommentarer, arrays, subrutiner og så videre. Med denne typen funksjoner tilgjengelig, er det mulig å skrive rimelig sofistikerte applikasjoner som shell scripts. Imidlertid er de fortsatt begrenset av det faktum at de fleste shell-språk har liten eller ingen støtte for systemdataskriving, klasser, tråding, kompleks matematikk og annen full funksjonalitet i det vanlige språket, og er generelt tregere. sammenlignet med kompilert kode eller tolkede språk skrevet med hastighet som et resultatmål.

Andre programmeringsspråk

Mange kraftige skriptspråk har blitt introdusert for oppgaver som er for store eller komplekse til å enkelt håndteres med vanlige shell-skript, men hvor fordelene med et skript er ønskelige og den virkelige utviklingen overhead, kompilering av programmeringsspråket. ufordelaktig. Spesifikasjonene til hva som skiller skriptspråk fra programmeringsspråk på høyt nivå er en hyppig kilde til debatt. Men generelt er et skriptspråk et som krever en tolk

Det kan virke som en spekulativ uttalelse blir møtt, siden det ofte er mange grunner som nevnes: "Men systemvedlikeholdsskriptsenteret, som alternativt kan være skrevet på et språk, fortsetter å være skrevet som et skript for systemet. shell, siden det ikke alltid er mulig å stole på tilstedeværelsen av de relevante skriptspråkmotorene.

Med et skriptspråk kan du:

  • lim eksisterende koder sammen
  • behandle svært store tekstfiler
  • manipulere filer og kataloger
  • dra nytte av spesialiserte operatører på høyt nivå
  • lage små applikasjoner med kort utviklingssyklus
  • lage applikasjoner med en integrert GUI
  • har portabilitet på Unix-, Windows- og Macintosh-plattformer
  • har en tolket kode (ingen kompilering / kobling)

Eksempler på skriptspråk:

Livssyklus

Shell-skript fungerer ofte som et tidlig stadium i programvareutvikling, og er ofte gjenstand for konvertering etter en annen underliggende implementering , oftest konvertert til Perl , Python eller C. Tolkedirektivet lar den detaljerte implementeringen skjules fullstendig i skriptet, i stedet for å bli eksponert som en filtype, og gir sømløs reimplementering på flere språk, uten innvirkning på sluttbrukere.

Relaterte elementer

Andre prosjekter

  • Samarbeid på Wikibooks Wikibooks inneholder skriptet tekst eller manualer

Eksterne lenker