Introduktion til Csh Scripts

I en verden domineret af grafiske brugergrænseflader kan konceptet med at interagere med en computer via tekstkommandoer virke forældet. Men for mange avancerede brugere, systemadministratorer og udviklere er kommandolinjen og de scripts, der kører på den, et uundværligt værktøj til automatisering, systemvedligeholdelse og gentagne opgaver. Et af de skaller (shells), der historisk har været populær i Unix-lignende systemer, er C shell, eller csh. At skrive scripts i csh giver mulighed for at sammensætte en række kommandoer og logik til at udføre komplekse operationer effektivt.

Grundideen bag scripting med en shell som csh er at have en sekvens af kommandoer, potentielt kombineret med kontrolstrukturer, der instruerer shellen i at udføre en række handlinger. I sin kerne er der ingen fundamental forskel mellem et script og et program; begge er sæt af instruktioner, der udføres af computeren. Csh, med sin C-lignende syntaks for visse kontrolstrukturer (som dog ikke er beskrevet i det medfølgende materiale), er et af flere tilgængelige shell-sprog.

How to use csh file?
HOW TO INVOKE A CSH SCRIPT?1Execute csh directly and then enter script commands interactively.2Store a group of csh commands in the file 'myScript' and execute it using: % csh myScript ... ...3Begin the script with the line #!/usr/bin/csh ... where '...' is again the arguments to the shell.
Indholds

Hvorfor bruge Csh Scripts?

At skrive scripts kan transformere kedelige, manuelle processer til hurtige, pålidelige og gentagelige operationer. Dette er især nyttigt i situationer, der kræver udførelse af mange trin, gentagne gange, eller hvor præcision er afgørende. Et område, hvor csh scripts kan være særligt fordelagtige, er til at skrive korte scripts til at køre testsekvenser. Forestil dig at skulle teste et program med mange forskellige input eller gentage en serie af trin for at verificere funktionalitet. At gøre dette manuelt er ikke kun tidskrævende, men også udsat for menneskelige fejl.

Som det fremhæves i relevant litteratur om emnet, er det trættende og upålideligt at udføre meget testning manuelt. Korrekt testning involverer typisk et stort antal tests, mange forskellige input og omfattende sammenligninger af output. Testning bør derfor idealiter udføres af programmer eller scripts, da disse ikke bliver trætte eller skødesløse. Det er værd at investere tid i at skrive et script eller et simpelt program, der indkapsler alle testene, så en komplet testsuite kan køres ved (bogstaveligt eller billedligt talt) at trykke på en enkelt knap. Jo nemmere en testsuite er at køre, jo oftere vil du køre den, og jo mindre sandsynligt er det, at du springer den over, når tiden er knap. Dette princip understreger værdien af at automatisere opgaver, og csh scripts tilbyder en vej til at opnå netop dette, især for mindre, specifikke automatiseringsbehov.

Sådan udfører du et Csh Script

Når du har skrevet dit csh script, er næste skridt at udføre det. Der er primært tre måder, hvorpå du kan køre et csh script. Hver metode har sine egne anvendelser og implikationer, som det er vigtigt at forstå for effektivt at arbejde med csh.

Interaktiv udførelse

Den første metode er at starte csh shellen direkte og derefter indtaste scriptkommandoerne interaktivt linje for linje. Dette er sjældent praktisk for længere scripts, men det er nyttigt til at teste individuelle kommandoer, eksperimentere med syntaks eller køre meget korte sekvenser af instruktioner. For at gøre dette, åbner du en terminal og skriver simpelthen csh og trykker Enter. Du vil derefter blive præsenteret for csh prompten (ofte '%'), hvor du kan indtaste og udføre csh kommandoer direkte.

How to use csh file?
HOW TO INVOKE A CSH SCRIPT?1Execute csh directly and then enter script commands interactively.2Store a group of csh commands in the file 'myScript' and execute it using: % csh myScript ... ...3Begin the script with the line #!/usr/bin/csh ... where '...' is again the arguments to the shell.

Udførelse via 'csh scriptnavn'

Den anden og mere almindelige metode er at gemme en gruppe af csh kommandoer i en fil, f.eks. navngivet 'mitScript', og derefter udføre den ved at kalde csh og specificere filnavnet som et argument. Syntaksen for dette er:

% csh mitScript ...

Hvor '...' repræsenterer eventuelle argumenter, du ønsker at sende til scriptet. Når denne kommando udføres, starter systemet en ny forekomst af csh shellen, som derefter begynder at læse og udføre kommandoerne fra filen 'mitScript'. De argumenter, du angiver efter scriptnavnet ('...'), bliver tilgængelige inde i scriptet via den specielle variabel argv. Dette er en variabel der automatisk populeres af shellen med de argumenter, scriptet blev kaldt med, hvilket giver scriptet mulighed for at handle baseret på input fra brugeren eller et andet program.

Udførelse via Shebang-linjen (#!)

Den tredje metode er den mest elegante og ofte foretrukne måde at køre scripts på, da den lader scriptfilen fungere som en eksekverbar kommando i sig selv. Dette opnås ved at starte scriptfilen med en speciel linje, kendt som shebang-linjen. Shebang-linjen fortæller operativsystemet, hvilket fortolker (i dette tilfælde csh shellen) der skal bruges til at udføre resten af filen. Linjen ser typisk således ud:

#!/usr/bin/csh ...

Hvor #!/usr/bin/csh angiver stien til csh eksekverbar filen. Resten af linjen ('...') kan indeholde argumenter, der skal sendes til csh shellen, før scriptet startes. Et nyttigt argument, der er nævnt, er -f, som forhindrer shellen i at indlæse din personlige ~/.cshrc fil. Dette kan være ønskeligt for at sikre, at scriptet kører i et forudsigeligt miljø, uafhængigt af brugerens specifikke shell-konfiguration. For at kunne udføre filen direkte efter at have tilføjet shebang-linjen, skal filen have "udføre"-rettigheder (execute permissions). Dette tildeles typisk ved hjælp af kommandoen chmod +x mitScript. Når tilladelserne er sat korrekt, kan du blot skrive filens navn (evt. med stien foran, f.eks. ./mitScript) i terminalen, og operativsystemet vil bruge csh til at udføre scriptet.

Grundlæggende elementer i Csh Scripts

Uanset hvordan du vælger at udføre dit csh script, vil du sandsynligvis gøre brug af nogle grundlæggende byggeblokke, der er fælles for de fleste scriptingsprog: kommentarer og variabler.

Kommentarer

Kommentarer er linjer eller dele af linjer i scriptet, som shellen ignorerer fuldstændigt under udførelsen. De er udelukkende til for at gøre scriptet mere læsbart og forståeligt for mennesker, der læser koden. I csh (og mange andre shell-sprog) angives en kommentar ved at placere et hash-tegn (#) i starten af linjen eller efter en kommando. Alt, hvad der følger efter # på den samme linje, betragtes som en kommentar og ignoreres. For eksempel:

# Dette er en hel linje, der er en kommentar /usr/local/bin/ls # Denne del af linjen er en kommentar, kommandoen kører

At bruge kommentarer flittigt er god praksis, da det hjælper med at dokumentere scriptets formål, logik og eventuelle særlige overvejelser, hvilket gør det lettere at vedligeholde og fejlfinde senere.

Variabler

Variabler er navngivne beholdere, der bruges til at gemme information i et script. Denne information kan være tekststrenge, tal eller resultater af kommandoer. I csh kan variabler bruges til flere formål:

  • At få miljøinformation: Shellen og operativsystemet definerer mange variabler, der indeholder information om brugerens miljø, såsom HOME (hjemmemappe), PATH (stier til eksekverbare filer) eller DISPLAY (hvor grafiske programmer skal vises). Disse er kendt som miljøvariabler.
  • At gemme brugerdefinerede information: Du kan oprette dine egne variabler til at gemme værdier, du har brug for senere i scriptet. Dette gøres ved hjælp af set kommandoen. For eksempel: set MINEDITOR = /usr/local/bin/emacs gemmer stien til en foretrukken editor i variablen MINEDITOR.
  • At gemme output fra kommandoer: Du kan tildele outputtet fra en kommando til en variabel ved at omslutte kommandoen med backticks (</code>). For eksempel: <code>set DATO =date</code> vil køre <code>date</code> kommandoen og gemme dens output (den aktuelle dato og tid) i variablen <code>DATO</code>.</li></ul><p>Brugen af variabler gør scripts dynamiske og fleksible, da de kan operere på data, der kan ændre sig, eller som stammer fra scriptets omgivelser eller tidligere trin.</p><h3>Variabelsubstitution</h3><p>Når du har gemt information i en variabel, skal du kunne tilgå dens værdi. Dette gøres gennem variabelsubstitution, som forekommer, når et ord er foranstillet af tegnet <code>$</code>. Shellen genkender <code>$</code> som en indikation på, at det følgende ord er navnet på en variabel, og den erstatter derefter <code>$variabelnavn</code> med værdien af den pågældende variabel. For eksempel, hvis du har sat variablen <code>DISPLAY</code>, som typisk indeholder information om din skærm, kan du udskrive dens værdi med:</p><pre><code>#!/usr/bin/csh echo "Din skærm er $DISPLAY"</code></pre><p>Når dette script køres, vil <code>$DISPLAY</code> blive erstattet med den aktuelle værdi af <code>DISPLAY</code> miljøvariablen, og <code>echo</code> kommandoen vil udskrive den resulterende streng.</p><p>En særlig form for variabelsubstitution er notationen <code>$?navn</code>. Denne substitution udvides til <code>1</code>, hvis variablen 'navn' er sat (dvs. har fået tildelt en værdi), eller til <code>0</code>, hvis 'navn' ikke er sat. Dette er den fundamentale mekanisme, der bruges til at kontrollere, om bestemte variabler er blevet tildelt værdier. Alle andre former for henvisning til udefinerede variabler (f.eks. blot at bruge <code>$en_usat_variabel</code>) vil forårsage fejl under scriptets udførelse. Brugen af <code>$?</code> er derfor vigtig for at skrive robuste scripts, der kan håndtere situationer, hvor forventede variabler måske ikke er til stede.</p><h3>Arrays</h3><p>Csh understøtter også variabler, der kan indeholde lister af værdier, ofte omtalt som arrays (selvom de i csh mere præcist er ordlister). Dette er nyttigt, når du har en samling af relaterede elementer, som du skal håndtere samlet eller individuelt. Adgang til det n'te komponent af en sådan variabel sker via notationen <code>$arrayNavn[n]</code>. Det er vigtigt at bemærke, at indeksering i csh arrays typisk starter fra 1, ikke 0, hvilket adskiller sig fra mange andre programmeringssprog.</p><p>Ud over at tilgå individuelle elementer kan det også være nyttigt at vide, hvor mange elementer der er i en array-variabel. Notationen <code>$#arrayNavn</code> udvides til antallet af elementer i variablen 'arrayNavn'. Dette giver dig mulighed for at iterere over elementerne i et array eller kontrollere, om et array indeholder det forventede antal elementer. Arrays, sammen med variabelsubstitution, udvider markant mulighederne for at manipulere data og argumenter inden for et csh script.</p><h2>Ofte Stillede Spørgsmål (FAQ)</h2><dl><dt>Hvad er et csh script?</dt><dd>Et csh script er en tekstfil, der indeholder en række kommandoer og instruktioner skrevet i C shell (csh) sproget, som shellen kan udføre sekventielt.</dd><dt>Hvorfor skulle jeg bruge csh scripts?</dt><dd>Csh scripts er nyttige til at automatisere gentagne opgaver, køre testsekvenser på en pålidelig måde og sammensætte flere kommandoer til en enkelt, eksekverbar enhed. De er især gode til mindre automatiseringsopgaver.</dd><dt>Hvordan kører jeg et csh script?</dt><dd>Du kan køre et csh script interaktivt ved at starte csh og indtaste kommandoer, ved at bruge <code>csh scriptnavn</code> i terminalen, eller ved at tilføje en shebang-linje (<code>#!/usr/bin/csh</code>) øverst i filen og give filen udførelsesrettigheder.</dd><dt>Hvordan tilføjer jeg kommentarer i et csh script?</dt><dd>Kommentarer starter med et hash-tegn (<code>#</code>). Alt efter <code>#</code> på den samme linje ignoreres af shellen og bruges kun til at forklare koden for mennesker.</dd><dt>Hvordan bruger jeg variabler i csh?</dt><dd>Du kan definere variabler ved hjælp af <code>set variabelnavn = værdi</code>. Du kan få adgang til variablens værdi ved at bruge <code>$variabelnavn</code>. Du kan også gemme output fra kommandoer i variabler ved hjælp af backticks (<code>).
    Hvordan tjekker jeg, om en variabel er defineret i csh?
    Du kan bruge notationen $?variabelnavn. Den vil udvides til 1, hvis variablen er defineret, og 0, hvis den ikke er defineret.
    Hvordan arbejder jeg med lister af værdier (arrays) i csh?
    Csh understøtter arrays. Du tilgår det n'te element med $arrayNavn[n] (hvor n typisk starter fra 1). Du kan finde antallet af elementer med $#arrayNavn.

Hvis du vil læse andre artikler, der ligner Introduktion til Csh Scripts, kan du besøge kategorien Teknik.

Avatar photo

Franne Voigt

Mit navn er Franne Voigt, jeg er en 35-årig fotograf fra Danmark med en passion for at fange øjeblikke og dele mine erfaringer gennem min fotoblog. Jeg har arbejdet med både portræt- og naturfotografi i over et årti, og på bloggen giver jeg tips, teknikker og inspiration til både nye og erfarne fotografer. Fotografi er for mig en måde at fortælle historier på – én ramme ad gangen.

Go up