Jim Infield
3 years ago
commit
3e906a8be1
4 changed files with 102 additions and 0 deletions
@ -0,0 +1 @@ |
|||
{"track":"bash","exercise":"error-handling","id":"1e691c64aa904034a0999b63b8f58bd8","url":"https://exercism.io/my/solutions/1e691c64aa904034a0999b63b8f58bd8","handle":"jinfield","is_requester":true,"auto_approve":false} |
@ -0,0 +1,53 @@ |
|||
# Error Handling |
|||
|
|||
Implement various kinds of error handling and resource management. |
|||
|
|||
An important point of programming is how to handle errors and close |
|||
resources even if errors occur. |
|||
|
|||
This exercise requires you to handle various errors. Because error handling |
|||
is rather programming language specific you'll have to refer to the tests |
|||
for your track to see what's exactly required. |
|||
|
|||
|
|||
Run the tests with: |
|||
|
|||
```bash |
|||
bats error_handling_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 error_handling_test.sh |
|||
``` |
|||
|
|||
|
|||
|
|||
## 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,5 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
[[ $# = 0 || ( $# > 1 && $2 != "and" ) ]] && echo "Usage: $0 <person>" && exit 1 |
|||
|
|||
echo "Hello, $*" |
@ -0,0 +1,43 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# local version: 0.0.1 |
|||
|
|||
@test "correct arguments" { |
|||
#[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash error_handling.sh Alice |
|||
|
|||
(( status == 0 )) |
|||
[[ $output == "Hello, Alice" ]] |
|||
} |
|||
|
|||
@test "one long argument" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash error_handling.sh "Alice and Bob" |
|||
|
|||
(( status == 0 )) |
|||
[[ $output == "Hello, Alice and Bob" ]] |
|||
} |
|||
|
|||
@test "incorrect arguments" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash error_handling.sh Alice Bob |
|||
|
|||
(( status == 1 )) |
|||
[[ $output == "Usage: error_handling.sh <person>" ]] |
|||
} |
|||
|
|||
@test "print usage banner with no value given" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash error_handling.sh |
|||
|
|||
(( status == 1 )) |
|||
[[ $output == "Usage: error_handling.sh <person>" ]] |
|||
} |
|||
|
|||
@test "empty argument" { |
|||
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
|||
run bash error_handling.sh "" |
|||
|
|||
(( status == 0 )) |
|||
[[ $output == "Hello, " ]] |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue