de Alex Nadalin

Vă prezentăm ABS, un limbaj de programare pentru scripturi shell

În ultimele zile, mi-am luat ceva timp să lucrez la un proiect pe care îl aveam în minte de veacuri, o alternativă de scriptare la Bash: permiteți-mi să vă prezint Limbaj de programare ABS.

Va prezentam ABS un limbaj de programare pentru scripturi shell

De ce

Permiteți-mi să păstrez acest scurt: cu toții ne place programarea shell – automatizarea sarcinilor repetitive fără prea mult efort.

S-ar putea să fim de acord că programarea shell este, de asemenea, un fel de nuci în ceea ce privește sintaxa:

if [ -z $STRING ]; then    ...fi

Ca, ehm, ce naiba? fi? -z? paranteze?

Lupta cu Bash sau cu limbajul comun de programare shell poate deveni intensă din când în când. Scrierea codului, cum ar fi:

if (this == that) {    parts = this.split("/").filter(...).map(...)}

îți va aduce lacrimi în ochi dacă folosești coaja

Acum, puteți face lucruri similare cu orice limbaje de programare obișnuite (exemplul de mai sus este JavasScript valid): ceea ce aceste limbaje nu sunt grozave este integrarea lor cu sistemul de bază – un shell-ul este pur și simplu mult mai coincident / mai puternic din acea perspectivă.

Imaginați-vă că ați putea rula codul de genul:

host = $(hostname)
if (host == "johns_computer") {    ...}

Ei bine, nu trebuie să vă „imaginați” mai mult: ABS este un limbaj care combină comenzi rapide și simple ale sistemului cu o sintaxă mai elegantă.

Gândiți-vă la asta ca la cel mai bun lucru de la bomboane, doar că nu uitați că aceasta este definiția pe care v-a dat-o autorul ABS. Dar, serios, este destul de al naibii de convenabil.

Nu mă crede? Citește mai departe!

Exemple

Sunt un ferm credincios în „arată-mi codul!”Mantra, așa că hai să ajungem repede la ea. Executarea comenzilor shell este extrem de ușoară în ABS:

# Get the content of your hostfile$(cat /etc/hosts)

și conductele funcționează și ele:

# Check if a domain is in your hostfile$(cat /etc/hosts | grep domain.com | wc -l)

În acest moment putem capta doar ieșirea comenzii și a scriptului nostru peste ea:

# Check if a domain is in your hostfilematches = $(cat /etc/hosts | grep domain.com | wc -l)
# If so, print an awesome stringif matches.int() > 0 {  echo("We got ya!")}

Nu se va întâmpla, dar să spunem asta o eroare se întâmplă:

# Check if a domain is in your hostfilematches = $(cat /etc/hosts | grep domain.com | wc -l)
if !matches.ok {    echo("How do you even...")}
# If so, print an awesome stringif matches.int() > 0 {  echo("We got ya!")}

Am putea face acest lucru un pic mai general:

$ cat script.abs# Usage $ abs script.abs domain.com# Check if a domain is in your hostfiledomain = arg(2)matches = $(cat /etc/hosts | grep $domain | wc -l)
if !matches.ok {    echo("How do you even...")}
# If so, print an awesome stringif matches.int() > 0 {  echo("We got %s!", domain)}

Acum, șirurile sunt destul de plictisitoare, așa că putem încerca ceva mai distractiv:

# Say we're getting some JSON from a commandx = $(echo '{"some": {"dope": "json"}}')x.json().some.dope # "json"
# Arrays, you say?tz = $(cat /etc/timezone) # "Asia/Dubai"parts = tz.split("/") # ["Asia", "Dubai"]
# You better destructure the hell out of that![continent, city] = tz.split("/")

…si asa mai departe. Există multe lucruri „obișnuite” pe care le puteți face cu ABS, așa că nu mă voi concentra prea mult pe acestea – permiteți-mi să vă arăt piesele mai ciudate:

# Avoiding the bug that happened because# we forgot to compare strings case-insensitively"HELLO" ~ "hello" # true
# Just range1..3 # [1, 2, 3]
# Combined comparison operator (thanks Ruby!)5 <=> 5 # 05 <=> 6 # -16 <=> 5 # 1
# Classic short-circuiting1 && 2 # 21 || 2 # 1

Puteți parcurge întregul documentație în termen de 15 minute: scopul ABS nu este să fie un limbaj cu scop general, încărcat de caracteristici, astfel încât suprafața nu este atât de largă. În plus, dacă ați lucrat cu limbi precum JavaScript, Python sau Ruby, nu veți avea probleme să vă obișnuiți cu ABS.

Ce se va întâmpla acum?

Poți să te îndrepți spre Site-ul ABSși aflați mai multe despre limbă. Cei curajoși vor face în schimb o excursie la Repozitia github a ABS și descărcați o versiune pentru a-l instala local.

Cei mai curajoși vor:

bash <(curl https://www.abs-lang.org/installer.sh)

(s-ar putea să trebuiască să sudo chiar înainte de asta)

Care vei fi?

Va prezentam ABS un limbaj de programare pentru scripturi shell
Fotografie de Fabian Grohs pe Unsplash

Publicat inițial la odino.org (25 decembrie 2018).
Poți să mă urmărești mai departe Stare de nervozitate – ranturile sunt binevenite! ?