Skrive en enkel Bash Script

Det første steget er ofte det vanskeligste, men ikke la det stoppe deg. Hvis du noensinne har ønsket å lære å skrive et shell script, men visste ikke hvor du skal begynne, er dette din lykkedag.

Hvis dette er første gang du skriver et manus, ikke bekymre deg – shell scripting er ikke så komplisert. Det vil si at du kan gjøre noen kompliserte ting med skall-skript, men du kan få det over tid. Hvis du vet hvordan du skal kjøre kommandoer på kommandolinjen, kan du lære å skrive enkle skript på bare 10 minutter. Alt du trenger er en tekst editor og en idé om hva du ønsker å gjøre. Starte små og bruke skript for å automatisere små oppgaver. Over tid kan du bygge videre på det du vet og vind opp med å gjøre mer og mer med manus.



Starter Off


starter Hver script med en " shebang " og banen til skall som du vil skriptet å bruke, som så:!


 # /bin /bash 

" # " combo kalles en shebang av de fleste Unix geeks. Dette brukes av skallet for å avgjøre hvilken tolk til å kjøre resten av manuset, og ignorert av skallet som faktisk kjører skriptet. Forvirret? Skript kan være skrevet for alle typer tolker – bash, tsch, zsh, eller andre skjell, eller for Perl, Python, og så videre. Du kan også utelate den linjen hvis du ønsket å kjøre skriptet ved sourcing det på skallet, men la oss redde oss selv noen problemer og legge den til tillate skript som skal kjøres non-interaktivt.

Hva blir det neste? Du vil kanskje inkludere en kommentar eller to om hva manuset er for. Forord kommentarer med hash (#) karakter:


 # /bin /bash # En enkelt script 

La oss si at du ønsker å kjøre en rsync-kommandoen fra manus, snarere enn skrive det hver gang. Bare legg rsync-kommandoen til skriptet som du vil bruke:!.


 # /bin /bash # rsync scriptrsync -avh --exclude = " * bak " /home /bruker /Dokumenter //media /diskid /user_backup /Dokumenter /

Lagre filen, og deretter sørge for at det er satt kjørbar. Du kan gjøre dette ved hjelp av chmod verktøyet, noe som endrer en fil modus. Å sette den slik at et skript er kjørbar etter deg, og ikke resten av brukerne på et system, bruk " chmod 700 scriptname " - Dette vil la deg lese, skrive og utføre (run) manus - men bare din bruker. For å se resultatene, kjøre ls -IH scriptname og du vil se omtrent slik ut:


 -rwx ------ en jzb jzb 21 2010-02-01 03: 08 echo 

Den første kolonnen av rettigheter, rwx, viser at eieren av filen (jzb) har lese, skrive og utføre tillatelser. De andre kolonner med en dash show som andre brukere har ingen rettigheter for denne filen i det hele tatt.

Variabler

Listen script er nyttig, men det har hardkodet baner. Det kan ikke være et problem, men hvis du ønsker å skrive lengre skript som refererer baner ofte, har du sannsynligvis vil benytte variabler. Her er en rask prøve!


 # /bin /bash # rsync bruker variablesSOURCEDIR = /home /bruker /Dokumenter /DESTDIR = /media /diskid /user_backup /Dokumenter /rsync -avh - -exclude = ". * bak " $ SOURCEDIR $ DESTDIR 

Det er ikke mye til nytte hvis du bare referere kataloger en gang, men hvis de er brukt flere ganger, er det mye lettere å endre dem på ett sted enn å endre dem gjennom et skript.
< h3> Tar Input

Ikke-interaktive skript er nyttige, men hva om du må gi skriptet ny informasjon hver gang det kjøres? For eksempel, hva om du ønsker å skrive et manus å endre en fil? En ting du kan gjøre er å ta et argument fra kommandolinjen. Så, for eksempel når du kjører " script foo " skriptet vil ta navnet på det første argumentet (foo):


 # /bin /bashecho $ 1 

Her bash vil lese kommandolinjen og ekko (print) den første! argument -. det vil si den første strengen etter kommandoen selv

Du kan også bruke lese godta brukerundersøkelser. La oss si at du ønsker å be en bruker for innspill:


 # /bin /bashecho -e " Vennligst skriv inn navnet ditt! &Quot; lese nameecho " Hyggelig å møte deg $ navn " 

Det script vil vente for brukeren å skrive inn navnet (eller andre innspill, for den saks skyld), og bruke den som variabelen $ navn. Ganske enkelt, ja? La oss sette alt dette sammen til et script som kan være nyttig. La oss si at du vil ha et script som vil sikkerhetskopiere en katalog du spesifiserer på kommandolinjen til en ekstern vert!


 # /bin /bashecho -e " Hva katalog ville Har du lyst til å sikkerhetskopiere " lese directoryDESTDIR = Denne e-postadressen er beskyttet mot programmer som samler. Du må aktivere Javascript for å kunne se den. $ Katalogen /rsync --progress -avze ssh --exclude = " * iso " $ katalogen $ DESTDIR 

Det script vil lese i innspill fra kommandolinjen og erstatte det som målkatalogen på målet systemet, samt den lokale katalogen som skal synkroniseres. Det kan se litt komplisert som et endelig manus, men hver av biter som du trenger å vite for å sette det sammen er ganske enkel. Litt prøving og feiling, og du vil være å skape nyttige skript av dine egne.

Selvfølgelig er dette bare skrape overflaten av bash scripting. Hvis du er interessert i å lære mer, bør du sjekke ut Bash guide for nybegynnere.