Add bash/error-handling
This commit is contained in:
@@ -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.
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "Usage: ./error_handling <greetee>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Hello, $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
@test "correct arguments" {
|
||||||
|
run bash error_handling.sh Alice
|
||||||
|
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" = "Hello, Alice" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "one long argument" {
|
||||||
|
run bash error_handling.sh "Alice and Bob"
|
||||||
|
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" = "Hello, Alice and Bob" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "incorrect arguments" {
|
||||||
|
run bash error_handling.sh Alice Bob
|
||||||
|
|
||||||
|
[ "$status" -eq 1 ]
|
||||||
|
[ "$output" = "Usage: ./error_handling <greetee>" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "print usage banner with no value given" {
|
||||||
|
run bash error_handling.sh
|
||||||
|
|
||||||
|
[ "$status" -eq 1 ]
|
||||||
|
[ "$output" = "Usage: ./error_handling <greetee>" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "empty argument" {
|
||||||
|
run bash error_handling.sh ""
|
||||||
|
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" = "Hello, " ]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user