Beetaversioon: sisu on enamasti terviklik ja avalikuks katsetamiseks valmis, kuid vajab veel tehnilist, keelelist ja kasutatavuse kontrolli.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Käskude kuju ja argumentide loogika, mis kuulub osasse Osa I: Esimesed sammud.

AlgajaradaEtapp 2/3: Tööta failidega · peatükk 6/8

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
OsaTähendus
lskäsk: loetle kataloogi sisu
-lvalik: näita detailset loendit
-avalik: kaasa ka peidetud kirjed
/etcargument: 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.

KujuShelli 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.

MusterSobivad nimed
*.txtnimed, mis lõpevad .txt-ga
words.0?.txtwords.0 järel täpselt üks märk, siis .txt
words.0[0-9].txtkeskel ü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

  1. Milline osa käsus head -n 5 "minu fail.txt" on käsu nimi, valik, valiku väärtus ja failinimi?
  2. Mis vahe on "$HOME" ja '$HOME'?
  3. Miks leiab words.0?.txt ka nime words.0a.txt?
  4. 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 kuju
  • lskäsk
  • -lalipud
  • /etcargument
  • cp 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äärtust
  • cp 'fail nimi.txt' koopia.txtnimi tühikuga
  • touch -- -algab-kriipsuga.txtära tõlgenda lipuna
  • ls *.txtkõik .txt lõpuga failid
  • ls 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.