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.
Loogika
Enamasti saab käsurea kirjutada 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 -l
grep -n root fail.txt
cp fail.txt koopia.txt
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
Praktiline rusikareegel on:
käsk [valikud] [argumendid]
See on kõige loetavam kuju ka siis, kui käsk muutub pikemaks.
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 *.md
ls data-?.txt
ls pilt[12].png
Need tähendavad:
*sobitab null või rohkem märki?sobitab täpselt ühe märgi[]sobitab ühe märgi etteantud hulgast
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 sõna-sõnalt"..."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 täiesti sõna-sõnalist teksti - 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
--.