Jim Infield
3 years ago
commit
c61703ce52
4 changed files with 115 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
{"track":"bash","exercise":"hello-world","id":"d33428ae661c4b8894c26e51a68da7a9","url":"https://exercism.io/my/solutions/d33428ae661c4b8894c26e51a68da7a9","handle":"jinfield","is_requester":true,"auto_approve":true} |
@ -0,0 +1,101 @@ |
|||||
|
# 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/bats-core/bats-core). 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/bats-core/bats-core/archive/v1.2.0.tar.gz |
||||
|
==> Downloading from |
||||
|
https://codeload.github.com/bats-core/bats-core/tar.gz/v1.2.0 |
||||
|
######################################################################## |
||||
|
100.0% |
||||
|
==> ./install.sh /opt/boxen/homebrew/Cellar/bats/1.2.0 |
||||
|
🍺 /opt/boxen/homebrew/Cellar/bats/1.2.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 |
||||
|
`[[ $BATS_RUN_SKIPPED == true ]] || skip` |
||||
|
annotations prepending other tests. |
||||
|
|
||||
|
To run all tests, including the ones with `skip` annotations, run: |
||||
|
|
||||
|
```bash |
||||
|
BATS_RUN_SKIPPED=true bats hello_world_test.sh |
||||
|
``` |
||||
|
|
||||
|
## 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" -- programs that can call |
||||
|
external tools, such as |
||||
|
[`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 programs written in 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 |
||||
|
installation of 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. Note that there are some types of |
||||
|
problems that bash cannot solve, such as performing floating point |
||||
|
arithmetic and manipulating dates: for those, you must call out to an |
||||
|
external tool. |
||||
|
|
||||
|
## Submitting Incomplete Solutions |
||||
|
It's possible to submit an incomplete solution so you can see how others |
||||
|
have completed the exercise. |
@ -0,0 +1,3 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
echo "Hello, World!" |
@ -0,0 +1,10 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
# local version: 1.1.0.0 |
||||
|
|
||||
|
@test "Say Hi!" { |
||||
|
run bash hello_world.sh |
||||
|
|
||||
|
(( status == 0 )) |
||||
|
[[ $output == "Hello, World!" ]] |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue