Käsikirjoitus
Tietojenkäsittelytieteen termi script tarkoittaa tietyntyyppistä ohjelmaa , joka on kirjoitettu tietyllä ohjelmointikieliluokalla , jota kutsutaan komentosarjakieliksi . Erityinen luokka näistä ohjelmista on ns. shell-skriptit , eli komentosarjat, jotka on suunniteltu suoritettavaksi käyttöjärjestelmän kuoressa
Kuvaus
Normaalin ohjelman ja komentosarjan välinen ero ei ole selvä, mutta yleensä skripteistä voidaan tunnistaa seuraavat ominaisuudet:
- suhteellisen alhainen monimutkaisuus;
- tulkitun kielen käyttö ;
- integrointi automaattiseen järjestelmän konfigurointiprosessiin (esimerkiksi jokaisen käynnistyksen yhteydessä tai jokaisella tietyn käyttäjän kirjautumiskerralla ), web-sivulla (tyypillisesti JavaScript -kielellä ) tai joka tapauksessa suorittamaan aputehtäviä ja hyvin erityisiä tehtäviä;
- tietty lineaarisuus (skripti voi myös vastaanottaa syötteitä käyttäjältä, mutta yleensä erilaiset syötteet eivät olennaisesti muuta komentosarjan käyttäytymistä kuvaavan lohkokaavion rakennetta);
- oman graafisen käyttöliittymän puute ;
- kutsumalla muita ohjelmia suorittamaan kehittyneempiä toimintoja.
Shell script
Shell-skripti identifioi komentosarjan käyttöjärjestelmän tekstikuorelle , eli komentoriviliittymälle , jonka kieltä pidetään yksinkertaisena ohjelmointikielenä tietylle toimialueelle. Tällainen komentosarja suorittaa tyypillisesti järjestelmän hallintaan liittyviä tehtäviä , kuten tiedostojen käsittelyä (esim. uudelleennimeämistä, kopiointia tai siirtämistä), muiden ohjelmien suorittamista, tulostusta ja tekstinkäsittelyä. Pääasiallinen ja laajimmin hyödynnetty etu verrattuna suoraan vuorovaikutukseen komentotulkin kanssa kirjoittamalla komento toisensa jälkeen on automaatio, eli mahdollisuus määritellä kerta kaikkiaan komentosarjan kautta sarja erityisen samankaltaisia tai luonnehtivia operaatioita. hienostunut tapa. Tällä tavalla käsikirjoituksen kirjoittaminen vapauttaa kirjoittajan järjestyksessä toistamisen tylsyydestä tai tarpeesta muistaa tietyt yksityiskohdat, jättäen hänelle yksinkertaisen taakan sen toteuttamisesta.
Vaikka monilla shell-kielen tulkkeilla on komentoriviliitännät, kuten erilaiset Unix-tyyppiset järjestelmän kuoret (esim . Bash , C shell , Zsh , Debian Almquist ) tai Windows -komentotulkit ( PowerShell , cmd. exe tai command.com ), useat muut kielet, kuten AppleScript tai Windows Script Host (WScript.exe), ei niitä ole. Muita merkittäviä esimerkkejä ensisijaisesti komentosarjojen kirjoittamiseen tarkoitetuista shell-kielistä ovat DEC -järjestelmien Digital Command Language ( DCL ) tai IBM - järjestelmien työnohjauskieli ( JCL ) .
Edut ja haitat
Usein shell-skriptin kirjoittaminen on paljon nopeampaa kuin vastaavan koodin kirjoittaminen muilla ohjelmointikielillä. Monia etuja ovat helppo ohjelman tai tiedoston valinta, nopea aloitus ja interaktiivinen virheenkorjaus. Shell-skriptillä voidaan tarjota sekvenssi ja linkki olemassa olevien ohjelmien päätöksentekoon, ja kohtalaisen suurille skripteille käännösvaiheen puuttuminen on etu. Tulkintainen suoritus helpottaa virheenkorjauskoodin kirjoittamista skriptiin ja myös suorittamista uudelleen havaitsemalla ja korjaamalla vikoja. Ei-asiantuntijat voivat käyttää komentosarjoja ohjelman käyttäytymisen mukauttamiseen, ja komentotulkkikomentosarjat tarjoavat joitain rajoitettuja monikäsittelymahdollisuuksia .
Toisaalta komentotulkkikomentosarjat ovat alttiita kalliille virheille. Tahattomia kirjoitusvirheitä rm -rf * /(ei odotettavissa ) ovat Unix-yhteisön kansanperinteet, yksi ylimääräinen välilyönti muuntaa komennon komennosta, joka poistaa kaikki alihakemistot, sellaiseksirm -rf */ , joka poistaa kaikki ja myös yrittää poistaa kaikki juuriosion . Samanlaiset ongelmat voivat muuttua vaarallisiksi aseiksi, ja niiden väärinkäyttö voi poistaa tiedoston sisällön. Tämän tekee ongelmallisemmaksi se, että monet Unix-komennot eroavat nimestään vain yhdellä kirjaimella :
,, .cpmv>cpcncd
Toinen merkittävä haittapuoli on hidas suoritusnopeus ja tarve aloittaa uusi prosessi lähes kaikille suoritetuille komentotulkkikomennoille. Kun komentosarja on työ, se voidaan suorittaa luomalla liukuhihna , jossa tehokas komentosuodatin tekee suurimman osan työstä, mikä vähentää hidastumista. mutta monimutkainen komentosarja on yleensä useita suuruusluokkia hitaampi kuin tavanomainen käännetty ohjelma, joka tekee vastaavan toiminnon. Eri alustojen välillä on myös yhteensopivuusongelmia. Larry Wall , Perlin luoja , kirjoitti, että " Salli on helpompi siirtää kuin komentotulkkikomentosarja ".
Samoin monimutkaisempia skriptejä voidaan suorittaa itse shell-skriptikielen rajoissa; Nämä rajoitukset vaikeuttavat laatukoodin kirjoittamista erilaisten kuorien laajennusten vuoksi. Itse asiassa, jos ajattelit ratkaista shell-ongelmia alkuperäisellä shell-kielellä, saatat luoda odottamattomia pahempia ongelmia.
Monet joidenkin komentosarjakielten käytön haitat johtuvat kielen tai toteutussyntaksin suunnitteluvirheistä, eivätkä ne välttämättä johdu perustekstin komentorivin käytöstä, on useita kuoria, jotka käyttävät muita shell-ohjelmointikieliä tai jopa oikeita Scsh-tyyppisiä kieliä (joka käyttää Scheme ).
Ominaisuudet
Pikanäppäimet
Yksinkertaisimmassa muodossaan komentotulkkikomentosarja voi tarjota kätevän muunnelman järjestelmäkomennosta, jossa tietyt ympäristöasetukset, komentovaihtoehdot tai jälkikäsittelyasetukset otetaan käyttöön automaattisesti, mutta tavalla, joka sallii uuden skriptin edelleen toimia kuten normaali. Unix-komento.
Esimerkkinä voisi olla luoda uusi versio ls :stä, komennosta luetteloimaan tiedostoja (antamalla sille komennon nimi, joka on lyhyempi kuin l), jotka tavallisesti tallennetaan binkäyttäjän hakemistoon, kuten:, / home / nomeutente / bin / lsekä valmiiksi annetut ja oletuskomentoasetukset.
#! / bin / sh
LC_COLLATE = C ls -FCas " $ @ "
Tässä ensimmäinen rivi (Shebang) osoittaa, mitä tulkkia tulee käyttää muun skriptin suorittamiseen, toisella rivillä on luettelo tiedostomuodon ilmaisimien, sarakkeiden, kaikkien tiedostojen (ei jätetty pois) ja koon lohkoissa vaihtoehdoista. LC_COLLATE=Coletuksena isojen ja pienten kirjainten lajittelujärjestys, ja "$@"saa kaikki annetut parametrit välittämään lls-parametreina, jotta kaikkia ls:n tuntemia normaaleja valintoja ja syntaksia voidaan edelleen käyttää.
Käyttäjän on siksi voitava yksinkertaisesti käyttää lyleisesti käytettyjä lyhyempiä luetteloita.
Erätyöt
Shell-skriptit mahdollistavat lukuisten komentojen, jotka on syötettävä manuaalisesti komentoriviliittymään, suorittamisen automaattisesti ilman, että käyttäjän tarvitsee odottaa sekvenssin jokaisen vaiheen aktivoimista. Esimerkiksi hakemistossa, jossa on kolme C-lähdekooditiedostoa, sen sijaan, että suorittaisit manuaalisesti neljä komentoa, jotka tarvitaan lopullisen ohjelman rakentamiseen, voit sen sijaan luoda C - komentosarjan, jonka nimi on rakennettu ja tallennettu hakemistoon niiden mukana, joka kääntää ne automaattisesti:
#! / bin / csh
echo käännös ...
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
kaiku tehty .
Komentosarjan tulee antaa käyttäjän tallentaa muokattava tiedosto, keskeyttää editori, suorittaa se komennon . / buildkautta päivitetyn ohjelman luomiseksi, testata sitä ja palata sitten editoriin. Vuodesta 1980 lähtien tällaiset komentosarjat on kuitenkin korvattu apuohjelmilla, kuten make , jotka ovat erikoistuneet "build"-ohjelmiin. Kun kirjoitamme komennon (jota kutsumme nimellä job erottaaksemme sen prosesseista) ja painamme "enter"-näppäintä, se suoritetaan, mutta koska olemme ohjanneet syötettä ja lähtöä, voimme myös ohjata sen suorittamista. Jotkut komennot ovat monimutkaisia ja niiden suorittaminen estäisi komentotulkin käytön, ennen kuin se on valmis. Voit sitten käynnistää komennon taustalla ja saada komentotulkki vapaaksi muuhun käyttöön; voit kutsua etualalla olevaa komentoa tai keskeyttää tai peruuttaa sen. Jos haluat suorittaa komennon taustalla, lisää "&"-merkki komennon loppuun. Jos haluamme tulostaa tiedoston prova.txt taustalla, riittäisi antamaan komento lpr prova.txt &. Käyttöjärjestelmä antaa työlle yksilöllisen numeron ja käynnistää sen merkitsemällä sen plusmerkillä (aktiivinen työ).
Jos aloitamme uuden komennon, sille annetaan seuraava numero ja se merkitään "-"-merkillä (odottaa suoritusta). Nähdäksesi, mitkä työt ovat käynnissä ja kuinka monta työtä, anna vain työt-komento, jolloin saadaan suhteellinen tulos. Voit sitten antaa komennon palata etualalle käyttämällä fg-komentoa, jota seuraa "%"-merkki ja työn numero. Jos esimerkiksi haluat tuoda toisen komennon etualalle, kirjoita fg% 2. Komento ei voi palata taustalle ennen kuin se on valmis. On kuitenkin mahdollista kiertää tämä rajoitus keskeyttämällä työ näppäinyhdistelmällä "CTRL Z" ja käynnistämällä se uudelleen näppäimellä fg tai bg. Lopetettu komento ei ilmoita käyttäjälle työnsä lopettamisesta, ellei sitä ole erikseen ilmoitettu notify% 1:n kautta (tässä tapauksessa se varoittaa ensimmäisen komennon lopettamisesta). Lopuksi on mahdollista lopettaa komento väkisin, jos se esimerkiksi menee äärettömään silmukkaan. Linux tarjoaa kill-komennon, jota seuraa työn tunnistava numero (esim. % 1).
Yleistys
Yksinkertaiset eräprosessit eivät ole harvinaisia yksittäisissä tehtävissä, mutta shell-silmukoiden, testien ja muuttujien käyttö antaa käyttäjille paljon enemmän joustavuutta. Bash (Bourne - Again shell script) muuntaa JPEG -kuvat PNG - muotoon ja tarjoaa kuvien nimet komentorivillä - mahdollisesti jokerimerkkien avulla - sen sijaan, että se olisi listattu komentosarjassa, jossa voit luoda tämän tiedoston, joka yleensä tallennetaan nimellä/home /nomeutente/bin/jpg2png
#! / bin / bash
jpg :lle " $ @ " ; käytä # $ jpg -merkkiä jokaisen annetun tiedostonimen sijasta, vuorostaan png = " $ { jpg % .jpg } .png" # etsi tiedostonimen PNG-versio korvaamalla .jpg .png echo muuttamalla " $ jpg " .. # tulostaa tilatiedot komentosarjaa suorittavalle käyttäjälle, jos muunnat " $ jpg " jpg.to.png ; sitten # käytä muunnosohjelmaa (yleinen Linuxissa) luodaksesi PNG väliaikaistiedostoon
mv jpg.to.png " $ png " # jos se toimi, nimeä väliaikainen PNG-kuva uudelleen oikeaan nimeen muuten # ... muussa tapauksessa valittaa ja poistu komentosarjasta echo 'error: epäonnistui tuloste tallennettu tiedostoon "jpg.to.png".' 1 > & 2 exit 1 fi # "if"-testikonstruktin loppu tehty # "for"-silmukan loppu kaiku kaikki konversiot onnistuneet # kerro käyttäjälle hyvä uutinen
jpg2png-komento voidaan sitten suorittaa koko hakemistossa, joka on täynnä JPEG-kuvia vainjpg2png *.jpg
Totuus
Shell-skriptien keskeinen ominaisuus on, että niiden tulkkien kutsuminen käsitellään käyttöjärjestelmän ydinominaisuudena. Siten käyttäjän komentotulkki sen sijaan että kykenisi suorittamaan vain komentotulkkikielisiä skriptejä tai komentosarjaa, jossa vain tulkkiohje on käsitelty oikein, jos se ajettiin komentotulkista (molemmat olivat rajoituksia shell-skriptin Bourne-Again-skriptin alkuvuosina ), käyttöjärjestelmä itse alustaa ja suorittaa shell-skriptin. Nykyaikaista komentotulkkikomentoa ei voi sijoittaa samalle tasolle järjestelmäkomentojen kanssa, mutta monet järjestelmäkomennot ovat itse asiassa shell-skriptejä (tai yleisemmin komentosarjoja, koska joitain niistä ei tulkita komentotulkki. Sen sijaan komentosarjakieliä, kuten esim. : Perl , Python tai muut kielet). Tämä koskee myös palautuskoodeja, kuten muita järjestelmäapuohjelmia, jotka osoittavat onnistumisen tai epäonnistumisen, jolloin ne voidaan tunnistaa suurten ohjelmien komponentteiksi riippumatta siitä, miten nämä suuremmat työkalut on toteutettu.
Kuten tavalliset järjestelmäkomennot, komentotulkkikomentosarjat jättävät perinteisesti pois kaiken tyyppiset tiedostotunnisteet, ellei niitä ole tarkoitettu luettavaksi komentotulkissa, joka suoritetaan erityisellä tähän tarkoitukseen tarkoitetulla mekanismilla (esimerkiksi: sh's "." tai csh's source).
Ohjelmointi
Monet nykyaikaiset kuoret tarjoavat myös erilaisia toimintoja, jotka ovat normaalisti saatavilla vain kehittyneempiä yleisiä ohjelmointikieliä käytettäessä , kuten rakennusvuon ohjaus, muuttujat, kommentit, taulukot, aliohjelmat ja niin edelleen. Tällaisten toimintojen avulla on mahdollista kirjoittaa kohtuullisen kehittyneitä sovelluksia, kuten shell-skriptejä. Niitä rajoittaa kuitenkin edelleen se tosiasia, että useimmat shell-kielet tukevat vain vähän tai ei ollenkaan järjestelmätietojen kirjoittamista, luokkia, ketjutusta, monimutkaista matematiikkaa ja muita yhteisen kielen täydellisiä toimintoja, ja ne ovat yleensä hitaampia kuin käännetty koodi. tai tulkita kieliä, jotka on kirjoitettu nopeasti suoritustavoitteeksi.
Muut ohjelmointikielet
Monia tehokkaita komentosarjakieliä on otettu käyttöön tehtäviin, jotka ovat liian suuria tai monimutkaisia käsiteltäväksi kätevästi tavallisilla shell-skripteillä, mutta joissa komentosarjan edut ovat toivottavia ja todellinen kehitystyö vaatii ohjelmointikielen kääntämistä. epäedullista. Erityispiirteet siitä, mikä erottaa komentosarjakielet korkean tason ohjelmointikielistä, ovat usein keskustelun lähde. Mutta yleensä skriptikieli on sellainen, joka vaatii tulkin
Se voi tuntua spekulatiiviselta lausunnolta, sillä usein mainitaan monia syitä: "Järjestelmän ylläpitokomentosarjakeskus, joka voidaan vaihtoehtoisesti kirjoittaa jollakin kielellä, kirjoitetaan kuitenkin edelleen järjestelmän komentosarjana. shell, koska ei aina ole mahdollista luottaa asianmukaisten komentosarjakielikoneiden olemassaoloon.
Skriptikielen avulla voit:
- liitä olemassa olevat koodit yhteen
- käsitellä erittäin suuria tekstitiedostoja
- käsitellä tiedostoja ja hakemistoja
- hyödyntää korkean tason erikoistuneita operaattoreita
- luoda pieniä sovelluksia lyhyellä kehitysjaksolla
- luoda sovelluksia integroidulla graafisella käyttöliittymällä
- on siirrettävissä Unix-, Windows- ja Macintosh-alustoille
- on tulkittu koodi (ei kokoamista/linkitystä)
Esimerkkejä skriptikielistä:
- Lyödä
- AppleScript
- Erä (MS-DOS:n käyttämä komentosarjakieli)
- ActionScript
- JavaScript (komentosarjakieli, jota C ++ voi käyttää )
- Lua (komentosarjakieli, jota voi käyttää C ++ )
- Perl
- Python (komentosarjakieli, jota C ++ voi käyttää )
- PHP (komentosarjakieli, C ++ :n käytettävissä )
- VBScript
- Tcl (komentosarjakieli, jota voi käyttää C ++ )
Elinkaari
Shell-skriptit toimivat usein ohjelmistokehityksen varhaisena vaiheena, ja niitä muutetaan usein toisen taustalla olevan toteutuksen jälkeen, joka on yleisimmin muunnettu Perl- , Python- tai C -muotoon . Tulkkidirektiivi mahdollistaa sen, että yksityiskohtainen toteutus piilotetaan kokonaan skriptin sisällä sen sijaan, että se näkyisi tiedostopäätteenä, ja tarjoaa saumattoman uudelleentoteutuksen useilla kielillä ilman, että se vaikuttaa loppukäyttäjiin.
Aiheeseen liittyvät tuotteet
Muut projektit
Wikikirjat sisältävät käsikirjoitettua tekstiä tai oppaita
Ulkoiset linkit
- Greg Goebelin Johdanto Shell - ohjelmointiin osoitteessafaqs.org.
- UNIX/Linux-komentosarjan opetusohjelma , Steve Parker , osoitteessasteve-parker.org.
- Shell Scripting Primer (Apple) osoitteessadeveloper.apple.com.
- Mitä pitää ottaa huomioon kirjoitettaessa kannettavia shell-skriptejä , Peter Seebach ,linux.com. Haettu 4. toukokuuta 2019 (arkistoitu alkuperäisestä 24. maaliskuuta 2009).
- Ilmaiset Unix Shell - komentosarjakirjat osoitteessa freebookcentre.net .
- Scsh osoitteessa worldlingo.com .
- Komentosarjakielet ( PDF ), osoitteessa caspur.it .