mirror of https://github.com/01-edu/public.git
Michele Sessa
2 years ago
committed by
Michele
3 changed files with 94 additions and 0 deletions
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# set -euo pipefail |
||||
IFS=' |
||||
' |
||||
|
||||
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd) |
||||
|
||||
challenge() { |
||||
submitted="./check-user.sh $@ |
||||
" |
||||
expected="./check-user.sh $@ |
||||
" |
||||
submitted+=$(2>&1 bash "$script_dirS"/student/check-user.sh "$@") |
||||
expected+=$(2>&1 bash "$script_dirS"/solutions/check-user.sh "$@") |
||||
|
||||
diff -U 1 <(echo "$submitted") <(echo "$expected") |
||||
} |
||||
|
||||
challenge "-i" "root" |
||||
challenge "-e" "root" |
||||
|
||||
challenge "-i" "unknown_not_found" |
||||
challenge "-e" "unknown_not_found" |
||||
|
||||
challenge |
||||
challenge "-i" "root" "too" "many" "args" |
||||
challenge "-t" "root" |
||||
|
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
set -euo pipefail |
||||
IFS=' |
||||
' |
||||
|
||||
if [ $# != 2 ] |
||||
then |
||||
>&2 echo "Error: expect 2 arguments" |
||||
exit 1 |
||||
elif [[ $1 == "-e" ]] |
||||
then |
||||
user_info=$(getent passwd $2) |
||||
if [[ $user_info == "" ]] |
||||
then |
||||
echo no |
||||
else |
||||
echo yes |
||||
fi |
||||
elif [[ $1 == "-i" ]] |
||||
then |
||||
getent passwd $2 |
||||
else |
||||
>&2 echo "Error: unknown flag" |
||||
exit 1 |
||||
fi |
@ -0,0 +1,39 @@
|
||||
## Check User |
||||
|
||||
### Instructions |
||||
|
||||
In this exercise you will make a script `check-user.sh` that will take 2 arguments and return information about the selected user, always ended by a new line. |
||||
|
||||
The first argument will be a flag defining the behavior of the script: |
||||
- `-e`: check if the user exists, returns `yes` or `no` appropriately. |
||||
- `-i`: returns information about the user. |
||||
|
||||
The second argument will be the name of the checked user. |
||||
|
||||
> The information about the user will be formatted in the same way it appears in `/etc/passwd`. |
||||
|
||||
### Usage |
||||
|
||||
```console |
||||
$ ./check-user.sh -e root |
||||
yes |
||||
$ ./check-user.sh -i root |
||||
root:x:0:0:root:/root:/bin/bash |
||||
$ ./check-user.sh -e unknown |
||||
no |
||||
$ ./check-user.sh -i unknown |
||||
$ |
||||
``` |
||||
|
||||
> Your results may appear slightly different. |
||||
|
||||
### Error handling |
||||
|
||||
All errors will print a specific message on **stderr** (ending with a newline) and returns a specific non-zero value: |
||||
- Wrong number of arguments: `"Error: expect 2 arguments"`, returns `1`. |
||||
- First argument different from `-e` or `-i`: `"Error: unknown flag"`, exit with `1`. |
||||
|
||||
### Hints |
||||
|
||||
> `man getent` will be a great resource to explore |
||||
> [List Linux users](https://linuxize.com/post/how-to-list-users-in-linux/) |
Loading…
Reference in new issue