commit 9495e66bcf4910aec2cc899ad8280e8acf0d5eeb
parent 61cea0dd0cadb68a5a9cacd8a2e029cc5848e87b
Author: dwrz <dwrz@dwrz.net>
Date: Tue, 25 Jun 2019 08:16:23 +0000
Add bash/hello-world
Diffstat:
3 files changed, 99 insertions(+), 0 deletions(-)
diff --git a/bash/hello-world/README.md b/bash/hello-world/README.md
@@ -0,0 +1,81 @@
+# Hello World
+
+The classical introductory exercise. Just say "Hello, World!".
+
+["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is
+the traditional first program for beginning programming in a new language
+or environment.
+
+The objectives are simple:
+
+- Write a function that returns the string "Hello, World!".
+- Run the test suite and make sure that it succeeds.
+- Submit your solution and check it at the website.
+
+If everything goes well, you will be ready to fetch your first real exercise.
+
+# Welcome to Bash!
+
+Unlike many other languages here, bash is a bit of a special snowflake.
+If you are on a Mac or other unix-y platform, you almost definitely
+already have bash. In fact, anything you type into the terminal is
+likely going through bash.
+
+The downside to this is that there isn't much of a development
+ecosystem around bash like there is for other languages, and there are
+multiple versions of bash that can be frustratingly incompatible. Luckily
+we shouldn't hit those differences for these basic examples, and if you
+can get the tests to pass on your machine, we are doing great.
+
+## Installation
+
+As mentioned above, if you are on a unix-like OS (Mac OS X, Linux, Solaris,
+etc), you probably already have bash.
+
+## Testing
+
+As there isn't much of a bash ecosystem, there also isn't really a de
+facto leader in the bash testing area. For these examples we are using
+[bats](https://github.com/sstephenson/bats). You should be able to
+install it from your favorite package manager, on OS X with homebrew
+this would look something like this:
+
+```
+$ brew install bats
+==> Downloading
+https://github.com/sstephenson/bats/archive/v0.4.0.tar.gz
+==> Downloading from
+https://codeload.github.com/sstephenson/bats/tar.gz/v0.4.0
+########################################################################
+100.0%
+==> ./install.sh /opt/boxen/homebrew/Cellar/bats/0.4.0
+🍺 /opt/boxen/homebrew/Cellar/bats/0.4.0: 10 files, 60K, built in 2
+seconds
+```
+
+
+
+Run the tests with:
+
+```bash
+bats hello_world_test.sh
+```
+
+After the first test(s) pass, continue by commenting out or removing the `skip` annotations prepending other tests.
+
+## Source
+
+This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
+
+
+## External utilities
+`Bash` is a language to write scripts that works closely with various system utilities,
+like [`sed`](https://www.gnu.org/software/sed/), [`awk`](https://www.gnu.org/software/gawk/), [`date`](https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html) and even other programming languages, like [`Python`](https://www.python.org/).
+This track does not restrict the usage of these utilities, and as long as your solution is portable
+between systems and does not require installing third party applications, feel free to use them to solve the exercise.
+
+For an extra challenge, if you would like to have a better understanding of the language,
+try to re-implement the solution in pure `Bash`, without using any external tools.
+
+## Submitting Incomplete Solutions
+It's possible to submit an incomplete solution so you can see how others have completed the exercise.
diff --git a/bash/hello-world/hello_world.sh b/bash/hello-world/hello_world.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -o errexit
+set -o nounset
+
+main() {
+ echo "Hello, World!"
+}
+
+main "$@"
diff --git a/bash/hello-world/hello_world_test.sh b/bash/hello-world/hello_world_test.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+@test "Say Hi!" {
+ run bash hello_world.sh
+
+ [ "$status" -eq 0 ]
+ [ "$output" = "Hello, World!" ]
+}