Käskude kuju ja argumentide loogika
Paljud käsud näevad käsureal välja sarnased. Kui see põhimuster on selge, on hiljem palju lihtsam uusi käske õppida.
Alusta ühest näitest
Võta kõigepealt üks lihtne näide:
ls -la /etc
Siin on kolm eri rolli:
lson käsk-laon lipud ehk valikud/etcon argument ehk koht, mille peal käsk töötab
Sama loogika kordub väga paljudes teistes käskudes.
Näiteks:
cp vana.txt uus.txt
Siin:
cpon käsk- eraldi lippu ei ole
vana.txtjauus.txton argumendid
Põhireegel
Enamasti saab käsurea lugeda nii:
käsk [valikud] [argumendid]
See tähendab:
- kõigepealt tuleb käsu nimi
- siis tulevad valikud ehk lipud
- siis tulevad argumendid ehk see, mille peal käsku kasutatakse
Näiteks:
ls -la /etc
grep -n root fail.txt
cp fail.txt koopia.txt
Tüüpilised algaja vead
- aetakse segi, mis on valik ja mis on argument
- arvatakse, et kõik lipud töötavad igal käsul ühtmoodi
- unustatakse jutumärgid siis, kui nimes on tühikud
Kui saad aru valikutest, argumentidest ja jutumärkidest, tuleb üllatusi vähem.
1. Lühikesed ja pikad valikud
Valikud muudavad käsu käitumist.
Lühikesed valikud
ls -l
ls -a
ls -la
Siin:
-lon üks lühike valik-aon teine lühike valik-latähendab, et mõlemad pannakse kokku
Pikad valikud
Mõni käsk toetab pikemaid nimesid:
grep --help
grep --color=auto root fail.txt
Siin:
--helpon pikk valik ilma väärtuseta--color=autoon pikk valik koos väärtusega
Kõik käsud ei toeta samu kujusid. Mõni toetab -h, mõni --help, mõni mõlemat.
2. Argumendid
Argument on see, mille peal käsk töötab.
Näited:
ls /etc
cat fail.txt
cp vana.txt uus.txt
Siin on argumendid:
/etcfail.txtvana.txtjauus.txt
Need on siin näidetes rajad ja failinimed, millele käsk rakendub. Argument ei ole alati failinimi: see võib olla ka kataloogitee, muster, URL või muu väärtus, mida käsk vajab.
Rusikareegel jääb samaks:
käsk [valikud] [argumendid]
3. Valikute ja argumentide järjekord
Mõne käsu puhul võib järjekord tunduda paindlik, aga alati ei tasu sellele loota.
Turvalisem on kirjutada nii:
grep -n root fail.txt
cp -R kaust koopia
tar -czf varu.tar.gz kaust/
Ehk:
- käsu nimi
- kõige tavalisemad valikud
- sihtfailid või muud argumendid
4. Erimärk --
Kui faili nimi algab miinusega, võib käsk seda valikuna valesti tõlgendada.
Siis aitab --:
touch -- -imelik-fail
ls -- -imelik-fail
rm -- -imelik-fail
-- tähendab siin: “siit edasi ära tõlgenda enam midagi valikuna”.
5. Globbing ehk mustrid failinimedes
Shell oskab mõningaid märke tõlgendada mustritena.
Näited:
ls *.txt
ls words.0?.txt
ls pilt[12].png
Need tähendavad:
*.txtvalib kõik.txtlõpuga failidwords.0?.txtvalib failid naguwords.00.txt,words.01.txt,words.02.txt[]sobitab ühe märgi etteantud hulgast
Üldreegel nende märkide taga on:
*sobitab null või rohkem märki?sobitab täpselt ühe märgi
Oluline detail on see, et shell laiendab need mustrid enne, kui käsk ise käivitub.
Näiteks:
grep root *.txt
siin ei saa grep argumenti *.txt. Shell teeb sellest enne tegelike failinimede loendi.
6. Jutumärgid ja backslash
Kui failinimes on tühikud või erimärgid, tuleb nimi kaitsta.
Kõige tavalisemad võtted on:
echo '$HOME'
echo "$HOME"
echo fail\ nimega\ tühik.txt
Tähendus:
'...'jätab teksti täht-tähelt nii, nagu see on kirjutatud"..."lubab näiteks muutuja asenduse\kaitseb ühte märki
Näited
mkdir "Minu Kaust"
cd "Minu Kaust"
printf 'tere\n' > "fail nimi.txt"
cat "fail nimi.txt"
ja:
touch Minu\ fail.txt
cat Minu\ fail.txt
Mõlemad töötavad. Pikemate nimede puhul on jutumärgid tavaliselt loetavamad.
7. Üksik- ja topeltjutumärgid ei ole sama asi
Need kaks on shellis erineva tähendusega.
nimi='Mari'
echo 'Tere $nimi'
echo "Tere $nimi"
Tulemus on põhimõtteliselt selline:
'Tere $nimi'jätab teksti muutmata"Tere $nimi"asendab muutuja väärtusega
Praktiline reegel:
- kasuta
'...', kui tahad teksti võtta täht-tähelt nii, nagu see on kirjutatud - kasuta
"...", kui tahad säilitada ühe argumendi, aga lubada muutujate asendust
8. Failinimed tühikute ja erimärkidega
Kui failinimes on tühik, sulud, tärnid või muud erimärgid, siis shell võib nime valesti tükkideks jagada või mustrina tõlgendada.
Näited:
printf 'sisu\n' > "Minu fail.txt"
mv "Minu fail.txt" "Uus nimi.txt"
Kõige praktilisem soovitus alguses on:
- eelista nimedes sidekriipse või alakriipse
- kui nimes on tühik või erimärk, kasuta jutumärke
9. Kõige sagedamini korduvad lipud
Paljudes käskudes kohtad samu lühikesi märke, aga nende tähendus ei ole alati täpselt sama.
-hvõib tähendada abi või inimloetavat kuju-vtähendab sageli jutukamat väljundit-rvõi-Rtähendab sageli rekursiivselt-ntähendab sageli arvu või rea numbrit
Näited:
head -n 5 fail.txt
grep -n root fail.txt
rm -r vana-kaust
Sama lipp ei tähenda kõigis käskudes sama asja. Seepärast tuleb iga käsu abi eraldi vaadata.
Minitest
- Käivita
ls -la. - Ava mõne käsu abi kujul
--help. - Loo fail nimega
Minu fail.txtja kuva selle sisu. - Proovi käsku
ls *.mdmõnes kaustas, kus on mitu Markdown-faili. - Selgita ühe lausega, mida teeb
--.
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--pikk lipp või stop"..."hoia koos; muutujad toimivad'...'täht-tähelt nagu kirjas*failimuster?üks märk
Tüüpilised kujud
grep -n 'root' fail.txtlipp + muster + failcp 'fail nimi.txt' koopia.txtnimi tühikugarm -- --algab-kriipsuga.txtära tõlgenda lipunals *.txtkõik .txt lõpuga failidls words.0?.txtüks märk keskel