Introduktion til ABS, et programmeringssprog til shell-scripting

I løbet af de sidste par dage tog jeg mig tid til at arbejde på et projekt, jeg havde tænkt på i årevis, et scriptalternativ til Bash: Lad mig introducere dig til ABS-programmeringssproget.

Hvorfor

Lad mig holde dette kort: vi elsker alle shell-programmering - automatisering af gentagne opgaver uden for meget indsats.

Vi er sandsynligvis enige om, at shell-programmering også er en slags nødder med hensyn til syntaks:

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

Ligesom, ehm, hvad fanden? fi? -z? beslag?

Kæmpning med Bash eller det fælles shell-programmeringssprog kan blive intens fra tid til anden. Skrivekode såsom:

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

vil give tårer i øjnene, hvis du bruger skallen.

Nu kan du gøre lignende ting med ethvert almindeligt programmeringssprog (eksemplet ovenfor er gyldigt JavasScript): hvad disse sprog ikke er gode til, er deres integration med det underliggende system - en skal er simpelthen meget mere sammenfaldende / kraftfuld fra dette perspektiv.

Forestil dig, at du kunne køre kode som:

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

Nå behøver du ikke "forestille dig" mere: ABS er et sprog, der kombinerer hurtige og enkle systemkommandoer med en mere elegant syntaks.

Tænk på det som det bedste, siden slik, kun for at huske dette er den definition, ABS 'forfatter gav dig. Men seriøst er det ret darn praktisk.

Tro mig ikke? Læs videre!

Eksempler

Jeg er fast overbevist om “ vis mig koden! ”Mantra, så lad os hurtigt komme til det. At køre skalkommandoer er ekstremt let i ABS:

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

og rør fungerer også:

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

På dette tidspunkt kan vi bare fange output af vores kommando og script over det:

# 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!")}

Det sker ikke, men lad os sige, at der sker en fejl :

# 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!")}

Vi kunne gøre dette lidt mere generelt:

$ 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)}

Nu er strengene ret kedelige, så vi kan prøve noget mere sjovt:

# 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("/")

…og så videre. Der er masser af "almindelige" ting, du kan gøre med ABS, så jeg vil ikke fokusere meget på dem - lad mig vise dig de mere rare dele i stedet:

# 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

Du kan gennemse hele dokumentationen inden for 15 minutter: ABS 'mål er ikke at være et generelt funktionsbelastet sprog, så overfladen er ikke så bred. Derudover, hvis du har arbejdet med sprog som JavaScript, Python eller Ruby, har du ikke problemer med at vænne sig til ABS.

Hvad sker der nu?

Du kan gå over til ABS 'websted og lære mere om sproget. De modige tager i stedet en tur til ABSs github repo og downloader en frigivelse for at installere den lokalt.

De modigste vil bare:

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

(du skal muligvis sudo lige før det)

Hvilken vil du være?

Oprindeligt offentliggjort på odino.org (25. december 2018).

Du kan følge mig på Twitter - rants er velkomne! ?