![]() Unix komandinės eilutė Šis puslapis yra įvadas į Unix apvalkalo programas (shell scripts). Pradžioje dėmesys sutelkiamas vien į bendruosius Unix komandinės eilutės klausimus. Visi čia pateikiami pavyzdžiai buvo patikrinti Aix 6.1.8.0 aplinkoje. Šio straipsnelio tęsinys: Programavimas Unix apvalkalo aplinkoje, Įvadas Unix apvalkalas (shell) yra komandinės eilutės interpretatorius, įvykdantis vieną ar kelias komandinėje eilutėje įvestas Unix komandas. Galima kelias komandas užrašyti vienoje eilutėje, jas atskiriant kabliataškiais (;). To
patikrinimui, susikurkime pirmąją programėlę (be abejo, tai Labas, pasauli!) - į failą first.sh
rašykime eilutę: Tada įvykdykime tokią sudėtinę komandą: Jos rezultatas: Dabar kartu galime peršokti ir prie mūsų pirmosios programėlės vykdymo. Pirmiausia,
nustatykime, kad taivykdomasis failas, ką galime padaryti komanda: O tada ją vykdome: Atsakymas: Vykdymas buvo atliktas tuo metu veiksniame Unix branduolio apvalkale (shell).
Tačiau galima programą vykdyti ir norimu (kitu) interpretatoriumi, pvz.,
O jeigu norime, kad programa visada būtų vykdomu kokiu nors vienu pasirinktu interpretatoriu, tai galime nurodyti pačiame programos tekste, pvz., #!/bin/bash echo "Labas, pasauli!" Specialūs simboliai Yra keli specialūs komandinėje eilutėje naudojami simboliai: \ - po jo einančio simbolio (pvz., specialaus panaudojimas juo pačiu) reikšmės naudojimas > - komandos rezultatą užrašyti nurodytame faile (o ne pavaizduoti ekrane); < - įvedimo duomenis komandai reikia paimti iš nurodyto failo (pavyzdžiai bus vėlesniuose aptarimuose); | - konvejeris - pirmos komandos išvedimo tekstas perduodamas kaip įvedimo tekstas kitai komandai; & - simbolis eilutės gale nurodo, kad komandą (pvz., ilgai trunkančią) reikia vykdyti foniniu režimu. Kol ji vykdoma, galima lygiagrečiai vykdyti kitas (tolimesnes) komandas. Pvz., 1. su \: echo Tekstas \ per dvi eilutes echo "Labas, \"pasauli\!" Tekstas per dvi eilutes 2. Su >
Ekrane bus pateikta: Pastaba: Taip yra todėl, kad simbolis > taikytas ne visai komandinei eilutei, o tik
antrajai komanda (prie kurios jis ir buvo įrašytas). Jei norime, kad į failą būtų surašytas tik
pirmos komandos rezultatas, turime užrašyti taip: Tada ekrane bus pateikta: 3. Su |
Ekrane bus pateikta: Paaiškinimas: į ekraną tekstą išvedė komanda cat, kuri duomenis gavo iš ankstesnės komandos ls f* Kartais norima užsitikrinti, kad nukreipimas neužrašytų ant jau egzistuojančių failų. To
išvengimui galime įvykdyti komandą: Tačiau ir šiuo atveju lieka galimybė juos uždengti, - kai nukreipimas atliekamas
panaudojant >| konstrukciją, pvz., Taip pat yra trys skaitiniai kanalai, kurie gali būti naudojami nukreipimuose: Pvz., - išvedimas nukreipiamas į standartinį klaidų kanalą: Papildomai: && nurodo, kad kitą komandą reikia vykdyti tik tada, jei pirmoji buvo įvykdyta
sėkmingai, pvz., || - užtikrina sąlyginį vykdymą komandos priklausomai nuo pirmos komandos vykdymo
sekmės. Pvz., tokia konstrukcija sukurs katalogą aplankas, jei jo nebuvo: Pastaba: klaida į ekraną vis tiek bus pateikta: Komandas galima grupuoti riestiniais skliaustais, pvz., Daugybinis nurodymas: * - bet kokių simbolių seka; Pvz., ls [!f].sh echo -e "Tekstas per \ndvi eilutes"
Prieš vykdant komandinę eilutę, išplėtimas ir pakeitimas joje vyksta tokia tvarka: Komandinės eilutės interpretatoriai Vartotojui priskiriamas konkretus komandinės eilutės interpretatorius, kuris įkeliamas jam
prisijungus. Naujo interpretatoriaus įkėlimui surinkite jo vardą, pvz., Priskirtas interpretatoriaus vardas saugomas aplinkos kintamajame $SHELL. Pvz., jo
pasižiūrėjimui: Pastaba: tačiau $SHELL saugo tik pradinio interpretatoriaus vardą. Norint sužinoti
interpretatorių, kuris veiksnus, reikia kitaip suktis. Daugelyje aplinkų (bet ne visose) tai galima
sužinoti šios komandos dėka: Ji pateikia tokio tipo informaciją: PID TTY TIME CMD 3145790 pts/7 0:00 bash Išeiti iš interpretatoriaus galima su komanda Koks kelias iki interpretatoriaus: Visų interpretatorių sąrašas surašytas faile /etc/shells Interpretatorių galima pasikeisti arba chsh arba passwd -s komandomis. Interpretatorių yra gana daug. Čia paminėsime keletą pagrindinių: sh - originalusis Unix interpretatorius, vadinamas Bourne interpretatoriumi; Be šių (ir įvairių jų atmainų) dar yra nemažai kitų, rečiau naudojamų komandinės eilutės
interpretatorių. Kelis jų paminėsime: Tekstinių redaktorių panaudojimas Kitaip nei įprasti tekstų redaktoriai, sed yra komandinės eilutės (neinteraktyvus) tekstų redaktorius. Jis apdoroja vieną įvedimo eilutę ir rezultatą pateikia į standartinį išvedimo srautą. Paprasčiausiu atveju sed veikia kaip filtras, tekste ieškantis tam tikro šablono ir, radęs šabloną tenkinantį teksto fragmentą, atliekantis nurodytus veiksmus. sed dažnai naudojamas teksto pakeitimui, tačiau galima naudoti ir teksto papildymui, pašalinimui ar pateikimui. sed veikia taip: taikoma nurodytas komandas pirmajai eilutei, o tada skaito po vieną kitas... Tad į atmintį niekada nebūna įkeltas visas failas. sed operacijas galima vykdyti:
sed perduodama komanda turi šias komponentes:
Reguliariosiose išraiškose dažniausiai naudojami simboliai: Pavyzdžiai:
Be pakeitimo (s) komandos dar galima naudoti įterpimo (į), papildymo (a) ir šalinimo (d) komandas. Pvz., paskutinę
teksto eilutę pašalins tokia komanda:
Šio skyrelio tikslas tebuvo supažindinti su sed, tad labai neišsiplėsime ties šia tema. Ji leidžia netgi sąlyginį komandų vykdymą (ir ciklų organizavimą). Užbaigdami pateksime pavyzdėlį, pateikiantį visas eilutes, kuriose yra žodis Unix:
Pastaba: Unix skriptuose tekstų tvarkymui galima panaudoti ir awk utilitą skaitykite Įvadą į AWK. Skaitykite tęsinį: Programavimas Unix apvalkalo aplinkoje Ankstesnės "Advanced HTML" skyrelio temos: | |