In this section, we'll learn more about the basic constructs provided by Hush. That'll enable you to implement Hush scripts using functions, data structures, and control flow.
With Hush installed, we're able to execute scripts. Here's the traditional Hello world program in Hush:
#!/usr/bin/env hush std.print("Hello world!")
The first line is a Shebang. It tells the operating system which interpreter to use for the script. The second line is a function call of the
Hello world! to the standard output.
To execute this script, save it to a file named
hello-world.hsh, give it execution permission, and then run it:
$ chmod +x hello-world.hsh $ ./hello-world.hsh Hello world!
You can also execute a given script calling Hush with the script path as argument. When executing a script using this method, the Shebang is unnecessary, and will be disregarded as an ordinary comment.
$ hush hello-world.hsh Hello world!
Alternatively, when given no aguments, Hush will start a non-interactive shell. You can go ahead and write your Hush script into the terminal. When you're done, press Ctrl-D and Hush will execute everything you've typed. Ctrl-D sends a special End of File (EOF) signal to the Hush interpreter so that it knows where the script ends.
Hush provides some tools for static analyses of scripts, which can be invoked by passing flags to the shell. The most useful one is the
--check flag, which will check the script for syntax and semantic errors, without executing it.
Consider the following
script.hsh, which attempts to use the undeclared variable
value = "Hello world!" std.print(value)
We can check verify that the script has semantic errors:
$ hush --check script.hsh Error: script.hsh (line 1, column 0) - undeclared variable 'value' Error: script.hsh (line 2, column 10) - undeclared variable 'value'
To get a list of other useful flags, run