Käskude kuju ja argumentide loogika
Uut käsku on lihtsam lugeda, kui eristad toimingut, selle valikuid ja sisendit.
Alusta ühest näitest
ls -la /etc
| Osa | Tähendus |
|---|---|
ls | käsk: loetle kataloogi sisu |
-l | valik: näita detailset loendit |
-a | valik: kaasa ka peidetud kirjed |
/etc | argument: millist kataloogi vaadata |
-la ühendab siin valikud -l ja -a. Üldine märkimisviis on käsk [valikud] [argumendid]: käsiraamatu nurksulud tähistavad valikulist osa, mitte käsureale kirjutatavaid sulge. Tehnilises dokumentatsioonis võidakse argumentideks nimetada ka valikuid.
Lühikesed ja pikad valikud
Lühike valik algab ühe kriipsuga, pikk valik enamasti kahega. Näiteks GNU ls -a ja ls --all on sama tähendusega, kuid macOS-i ls pikka kuju --all ei toeta.
Mõni valik vajab väärtust. Näites head -n 5 fail.txt kuulub 5 valiku -n juurde, mitte ei ole teine failinimi. Ära ühenda väärtusega valikuid juhuslikult üheks lipureaks.
Lipul ei ole kõigi käskude jaoks sama tähendust: ls -h näitab suurusi ühikutega, teises programmis võib -h tähendada abi. Kontrolli man-ist oma käsu valikuid.
Argumentide roll ja järjekord
cp vana.txt uus.txt kopeerib allika vana.txt sihtfailiks uus.txt. Nende vahetamine muudab kopeerimise suunda. Sihtfaili olemasolev sisu võib üle kirjutatud saada.
Kõige ülekantavam harjumus on panna valikud failinimede ette, näiteks ls -l /etc. Kõik programmid ei luba valikuid suvalisse kohta paigutada.
Tühikud, jutumärgid ja paomärk
Shell eraldab sõnu tühikute järgi. Tühikuga nimi tuleb koos hoida:
touch "minu fail.txt"
ls -l "minu fail.txt"
Sama nime saab kirjutada ka minu\ fail.txt: kurakriips \ võtab järgnevalt tühikult eraldaja tähenduse.
| Kuju | Shelli käitumine |
|---|---|
"minu fail.txt" | üks argument; tühik jääb nime sisse |
"$HOME" | üks argument; muutuja asendatakse väärtusega |
'$HOME' | täht-tähelt tekst $HOME, mitte muutuja väärtus |
HOME on kodukataloogi sisaldav muutuja. Võrdle:
echo "$HOME"
echo '$HOME'
Esimene näitab koduteed, teine sõna $HOME. Üksikjutumärgid kaitsevad teksti shelli tõlgenduse eest; käivitatav programm võib oma argumenti ikka eraldi tõlgendada, näiteks printf reavahetusmärki \n.
Kriipsuga algav failinimi
Paljudes käskudes lõpetab eraldi -- valikute lugemise. Seejärel käsitletakse ka kriipsuga algavat nime argumendina:
touch -- -markmed.txt
ls -l -- -markmed.txt
Siin -- ise ei ole pikk valik; pikk valik oleks näiteks --help. Alternatiiv on nimi ./-markmed.txt, mis algab punktiga, mitte kriipsuga.
Failinimede mustrid
Mustrilaiendus (*globbing*) on shelli käitumine, mitte uus käsk. Shell asendab mustri sobivate nimedega enne programmi käivitamist.
| Muster | Sobivad nimed |
|---|---|
*.txt | nimed, mis lõpevad .txt-ga |
words.0?.txt | words.0 järel täpselt üks märk, siis .txt |
words.0[0-9].txt | keskel üks number 0–9: 00 kuni 09 |
Katseta oma harjutuskataloogis:
touch words.00.txt words.01.txt words.0a.txt
ls words.0?.txt
ls words.0[0-9].txt
Esimene muster leiab kõik kolm, teine ainult kaks numbrilist nime. ? ei tähenda „üks number“, vaid „üks märk“.
Muster võib sobitada ka katalooginime. ls võib siis loetleda selle kataloogi sisu; ainult sobitatud kirjete endi vaatamiseks kasuta ls -d *.txt. -d käsitleb kataloogi kirjena.
Jutumärgid, näiteks '*.txt', takistavad shelli mustrilaiendust. Peidetud nimed ei sobi tavaliselt algava * alla. Kui vaste puudub, annab zsh vaikimisi vea no matches found, Bash jätab mustri tavaliselt sõnasõnaliselt käsule; seadistus võib seda muuta.
Minitest
- Milline osa käsus
head -n 5 "minu fail.txt"on käsu nimi, valik, valiku väärtus ja failinimi? - Mis vahe on
"$HOME"ja'$HOME'? - Miks leiab
words.0?.txtka nimewords.0a.txt? - Kuidas vaadata kriipsuga algava faili õigusi nii, et nimi ei muutuks valikuks?
Peatüki täisspikker
Algaja
Eesmärk
Õpi ühe näite pealt eristama käsku, lippu ja argumenti; siis ei tundu uus käsk iga kord täiesti uus keel.
Üks näide
ls -la /etcterve kujulskäsk-lalipud/etcargumentcp vana.txt uus.txtkaks argumenti
Olulised märgid
-lühike lipp--üksinda lõpetab valikute loendi"..."hoia koos; muutujad toimivad'...'täht-tähelt nagu kirjas*failimuster?üks märk
Tüüpilised kujud
head -n 3 fail.txtvalik -n vajab arvväärtustcp 'fail nimi.txt' koopia.txtnimi tühikugatouch -- -algab-kriipsuga.txtära tõlgenda lipunals *.txtkõik .txt lõpuga failidls words.0?.txt0 järel üks märk, mitte tingimata number
Etapi kontroll: kas oskad faili lugeda ja muuta ning eristada käsu nime, valikuid ja argumente? Kui mitte, korda selle etapi näiteid.