abs-lang / abs

Home of the ABS programming language: the joy of shell scripting.
https://www.abs-lang.org
MIT License
516 stars 35 forks source link
bash golang programming-language scripting scripting-language scripting-languages shell shell-scripting

abs language logo

GitHub Workflow Status (branch) License Version undefined undefined
undefined undefined Coverage Status
undefined undefined undefined undefined

The ABS programming language

ABS is a programming language that works best when you're scripting on your terminal. It tries to combine the elegance of languages such as Python, or Ruby with the convenience of Bash.

tz = `cat /etc/timezone`
continent, city = tz.split("/")

echo("Best city in the world?")

selection = stdin()

if selection == city {
  echo("You might be biased...")
}

See it in action:

asciicast

Let's try to fetch our IP address and print the sum of its parts if it's higher than 100. Here's how you do it in Bash:

# Simple program that fetches your IP and sums it up
RES=$(curl -s 'https://api.ipify.org?format=json' || "ERR")

if [ "$RES" = "ERR" ]; then
    echo "An error occurred"
    exit 1
fi

IP=$(echo $RES | jq -r ".ip")
IFS=. read first second third fourth <<EOF
${IP##*-}
EOF

total=$((first + second + third + fourth))
if [ $total -gt 100 ]; then
    echo "The sum of [$IP] is a large number, $total."
fi

And here's the same code in ABS:

# Simple program that fetches your IP and sums it up
res = `curl -s 'https://api.ipify.org?format=json'`

if !res.ok {
  echo("An error occurred: %s", res)
  exit(1)
}

ip = res.json().ip
total = ip.split(".").map(int).sum()
if total > 100 {
    echo("The sum of [$ip] is a large number, $total.")
}

Wondering how to run this code? Grab the latest release and run:

$ abs script.abs

Installation

The easiest way is to:

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

then you can:

$ abs path/to/scripts.abs

Documentation

Visit abs-lang.org or check the examples directory, which contains a few short scripts.

Contributing

Want to hack on ABS locally? The recommended development environment is inside a Docker container — simply:

After you make any change, run make test and check if any errors pop up. If everything looks fine that means you're ready to open a pull request!

Status

ABS is fresh and under active development; exciting things happen on a weekly basis!

Have a look at the roadmap here: to know of what version we're currently working on take a look at abs-lang.org/misc/technical-details.