I know enough Bash to read simple scripts, but I am always having a hard time when I am trying to write a script that does something that is more complicated than a one-liner that substitutes arguments into a template. I can eventually figure things out, but I have never bothered to develop my Bash skills, programming in it for me is error-prone and time-consuming.
So recently I have started experimenting with scripting in Common Lisp. It turns out to be very, very easy and convenient if you already know CL. I usually start scripting with a skeleton that looks like this:
(cl:defpackage #:script (:use #:cl) (:export #:run)) (cl:in-package :script) ;;; code comes here
I run things from SLIME and experiment with the REPL. When I think that I am approaching a solution, I write the main function run
:
(defun run () ...)
Then I use the following Makefile to compile it with cl-launch:
myscript: myscript.lisp cl-launch --lisp sbcl --file myscript.lisp --dump '!' \ --output myscript -i '(script:run)'
You can of course also include ASDF libraries, check the help of cl-launch.
For interfacing with the environment (pathnames, files, OS, etc), I find the UIOP compatibility library really helpful. It is included with ASDF, so most likely it is already on your computer.