Programuotojo Remigijaus Jarmalavičiaus tinklaraštis

Informacinės technologijos, programavimo įrankiai, atviro kodo projektai, knygos ir kiti programuotojo straipsniai.

Geriausios Bash praktikos, I dalis

Jau seniai esu LINUX naudotojas, todėl Bash jau nebėra naujiena. Scenarijų (skriptų) tenka rašyti labai daug ir visokių. Taip pat ir mini programėlių, kurias su laiku, truputį patvarkęs, žadu paskelbti savo GitHub repozitorijoje.

Prieš rašant (ir berašant) skriptus tekdavo pasiskaityti straipsnius kaip geriau daryti, kaip juos daro populiariausių programų autoriai, ko geriau vengti ir kas galbūt jau padaryta. Tad šiuose straipsniuose aprašysiu asmenines praktikas dėl Bash skriptų programavimo. Taip pat, pateiksiu kelis šaltinius, kuriuose nagrinėjamos panašios problemos.

Programos pavadinimas turi būti neilgas

Programų LINUX'uose kurių pavadinimai būtų ilgi - tikrai nedaug. Todėl jeigu skripto pavadinimas susideda iš kelių žodžių, tad geriausiai juos trumpinti. Pavadinimui sudaryti galima panaudoti pirmąsias žodžių raides. Pavyzdžiui: programa-skaičiuojanti-eilutes pataptų tiesiog pse.

Įsivaizduokite komanda wc skaičiuojanti eilučių ir žodžių skaičių (ir ne tik, žiūrėkite man wc) būtu pavadinta word-count. Žinoma, toks pavadinimas, nėra ilgas, tačiau tokia santrumpa lengvina jos naudojimą savo trumpumu.

Komandos turi turėti pagalbos ir versijos išvedimo funkcijas

Labai sunku spręsti ką daro programa vien tik iš pavadinimo. Tad praktiškai kiekviena rašoma programa turėtų turėti parametrą --help kuri išvestų komandos aprašymą, galimas funkcijas ir tų funkcijų aprašymus.

Programos nuolat tobulėja, galbūt kažkas naudosis Jūsų kurtomis, tad taps aktualu atsinaujinti. Aišku, nuspręsti ar reikia atsinaujinti (jeigu to nedaro automatiniai įrankiai) gali būti problematiška. Tuo labiau, jeigu programą atsisiųsti reikėtų iš Jūsų svetainės.

Šią problemą išspręsite į programą pridėję --version komandą, kuri išvestų kuri konkrečiai programos versija yra. Tiesa, derėtų vengti tokios išvesties kaip:

Šios programos versija yra: 1.2.3.4

Kuo blogai tokia išvesti? Joje per daug nereikalingos informacijos. Užtektų tik skaičiaus. Taip pat, derėtų nenaudoti --version trumpinio -v, kadangi šis argumentas dažniausiai reiškia verbose - platesnės informacijos apie programas atliekamas operacijas, išvedimą.

Na, o pagalbos teksto išvedimui puikiai tinka --help arba -h argumentai.

Interaktyvumas - ne visada gerai

Ar daug LINUX'uose interaktyvių programų? Tikrai ne. Įsivaizduokite tokias komandas kaip ls, kurios klaustų ką išvesti: šio ar kokio nors katalogo turinį? O kaip apie komandą cp, kuri užklaustų ką kopijuoti ir į kur?

Todėl interaktyvumo geriau vengti. Aišku, jo atsisakyti visiškai nereikėtų. Tokiems duomenims kaip naudotojo vardas ar slaptažodis saugumo sumetimais interaktyvumą padaryti reikėtų. Pavyzdžiui:

mysql -u remigijus -pSlaptažodis duomenų_bazė

Tai - nesaugu. Tokia eilutė bus išsaugota ~/.bash_history faile, todėl, kas nors ją nuskaitęs (tarkim kitas SSH naudotojas) galėtų prisijungti prie Jūsų „slaptos“ duomenų bazės.

Tad Jūsų programa pagalbos išvestyje turėtų aprašyti kurie argumentai yra privalomi (būtini), o kurie ne. Puikus pavyzdys yra komandos mv pagalbos išvestis:

$ mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
or:  mv [OPTION]... SOURCE... DIRECTORY
or:  mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Taigi, tarp laužtinių skliaustų parašyti parametrai kaip supratote, yra neprivalomi. Trys taškai nurodo, kad parametrų gali būti nei vieno arba bet kiek. Na, o neapskliausti parametrai yra būtini. Tai kaip matote, šiuo atveju yra SOURCE ir DEST.

Šiam kartui tiek, daugiau bus kituose straipsniuose. Tiems, kas norėtų pasimokyti scenarijų rašymu, siūlau paskaitinėti čia: IBM puslapyje, Bash pradžiamokslyje. Bei, pasimokyti galima paskaičius labai gerą knygą „Learning the bash Shell“.