Présentation d'ABS, un langage de programmation pour les scripts shell

Ces derniers jours, j'ai pris du temps pour travailler sur un projet que j'avais en tête depuis des lustres, une alternative de script à Bash: laissez-moi vous présenter le langage de programmation ABS.

Pourquoi

Permettez-moi de rester bref: nous aimons tous la programmation shell - automatiser les tâches répétitives sans trop d'effort.

Nous pourrions probablement convenir que la programmation shell est également un peu folle en termes de syntaxe:

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

Genre, ehm, qu'est-ce que c'est que ce bordel? Fi? -z? supports?

Se battre avec Bash, ou le langage de programmation shell commun, peut devenir intense de temps en temps. Code d'écriture tel que:

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

vous apportera les larmes aux yeux si vous utilisez la coque.

Maintenant, vous pouvez faire des choses similaires avec tous les langages de programmation traditionnels (l'exemple ci-dessus est un JavasScript valide): ce que ces langages ne sont pas géniaux, c'est leur intégration avec le système sous-jacent - un shell est simplement beaucoup plus coïncident / puissant de ce point de vue.

Imaginez que vous puissiez exécuter du code comme:

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

Eh bien, vous n'avez plus à «imaginer»: ABS est un langage qui combine des commandes système rapides et simples avec une syntaxe plus élégante.

Pensez-y comme la meilleure chose depuis les bonbons, mais rappelez-vous que c'est la définition que l'auteur de l'ABS vous a donnée. Mais sérieusement, c'est sacrément pratique.

Tu ne me crois pas? Continuer à lire!

Exemples

Je crois fermement au « montre-moi le code! »Mantra, alors allons-y rapidement. L'exécution des commandes shell est extrêmement simple en ABS:

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

et les tuyaux fonctionnent aussi:

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

À ce stade, nous pouvons simplement capturer la sortie de notre commande et script dessus:

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

Cela n'arrivera pas, mais disons qu'une erreur se produit:

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

Nous pourrions rendre cela un peu plus général:

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

Maintenant, les chaînes sont assez ennuyeuses, nous pouvons donc essayer quelque chose de plus amusant:

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

…etc. Il y a beaucoup de choses «régulières» que vous pouvez faire avec ABS, donc je ne me concentrerai pas beaucoup sur celles-ci - laissez-moi vous montrer les parties les plus étranges à la place:

# 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

Vous pouvez parcourir toute la documentation en 15 minutes: le but d'ABS n'est pas d'être un langage polyvalent et chargé de fonctionnalités, donc la surface n'est pas si large. De plus, si vous avez travaillé avec des langages tels que JavaScript, Python ou Ruby, vous n'aurez aucun mal à vous habituer à ABS.

Que va-t-il se passer maintenant?

Vous pouvez vous rendre sur le site Web d'ABS et en savoir plus sur la langue. Les plus courageux feront à la place un voyage dans le repo github d'ABS et téléchargeront une version pour l'installer localement.

Les plus courageux vont simplement:

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

(vous devrez peut-être sudo juste avant cela)

Lequel seras-tu?

Publié à l'origine sur odino.org (25 décembre 2018).

Vous pouvez me suivre sur Twitter - les dénonciations sont les bienvenues! ?