mirror of https://github.com/01-edu/public.git
3 changed files with 143 additions and 0 deletions
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# Unofficial Bash Strict Mode |
||||
set -euo pipefail |
||||
IFS=' |
||||
' |
||||
|
||||
FILENAME="student/env-format.sh" |
||||
|
||||
# True if FILE exists and is a regular file |
||||
if [ -f ${FILENAME} ]; then |
||||
# FILE exists and it's not empty |
||||
if [ -s ${FILENAME} ]; then |
||||
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then |
||||
echo "echo is not allowed in this exercise!" |
||||
exit 1 |
||||
fi |
||||
submitted=$(bash $FILENAME) |
||||
expected=$(bash solutions/env-format.sh) |
||||
diff <(echo "$submitted") <(echo "$expected") |
||||
else |
||||
echo "The file exist but is empty" |
||||
exit 1 |
||||
fi |
||||
else |
||||
echo "File does not exist" |
||||
exit 1 |
||||
fi |
@ -0,0 +1,2 @@
|
||||
printenv PWD |
||||
printenv | grep "H" | awk -F "=" '{print $1}' |
@ -0,0 +1,113 @@
|
||||
## Env-format |
||||
|
||||
### Instructions |
||||
|
||||
Create a script `env-format.sh`, which will print the environment variables that have the following formats: |
||||
|
||||
- Print the `PWD` value. |
||||
- All the environment variables that have a letter `H` in the name, without printing the value of those variables. |
||||
|
||||
```console |
||||
$ print env |
||||
SHELL=/bin/bash |
||||
QT_ACCESSIBILITY=1 |
||||
NVM_RC_VERSION= |
||||
COLORTERM=truecolor |
||||
HOMEBREW_PREFIX=/home/linuxbrew/.linuxbrew |
||||
DESKTOP_SESSION=i3 |
||||
... |
||||
PWD=/home/user |
||||
LOGNAME=user |
||||
MANPATH=/home/linuxbrew/.linuxbrew/share/man: |
||||
XDG_SESSION_DESKTOP=i3 |
||||
XAUTHORITY=/run/user/1000/gdm/Xauthority |
||||
WINDOWPATH=2 |
||||
SHELL=/bin/bash |
||||
SSH_AGENT_PID=2900 |
||||
HOME=/home/user |
||||
HOMEBREW_SHELLENV_PREFIX=/home/linuxbrew/.linuxbrew |
||||
USERNAME=user |
||||
$ |
||||
``` |
||||
|
||||
Expected output: |
||||
|
||||
```console |
||||
$ ./env-format.sh |
||||
/home/user/Documents/public/sh/tests/student |
||||
SHELL |
||||
SSH_AGENT_PID |
||||
HOMEBREW_SHELLENV_PREFIX |
||||
MANPATH |
||||
XAUTHORITY |
||||
WINDOWPATH |
||||
HOME |
||||
$ |
||||
``` |
||||
|
||||
### Hints |
||||
|
||||
Environment variables are variables that contain values necessary to set up a shell environment. Contrary to shell variables, environment variables persist in the shell’s child processes. |
||||
|
||||
```console |
||||
VARIABLE_NAME=value |
||||
``` |
||||
|
||||
Most Common Environment Variables: |
||||
|
||||
- PWD – Current working directory. |
||||
- HOME – The user’s home directory location. |
||||
- SHELL – Current shell (bash, zsh, etc.). |
||||
- LOGNAME – Name of the user. |
||||
- UID – User’s unique identifier. |
||||
- HOSTNAME – Device’s hostname on the network. |
||||
- MAIL – User’s mail directory. |
||||
- EDITOR – The Linux system default text editor. |
||||
- TEMP – Directory location for temporary files. |
||||
|
||||
How to Check Environment Variables: |
||||
|
||||
Structurally, environment and shell variables are the same – both are a key-value pair, separated by an equal sign. |
||||
|
||||
- `printenv`. Prints the values of all or some environment variables. |
||||
|
||||
```console |
||||
$ printenv HOME |
||||
/home/user |
||||
``` |
||||
|
||||
Search Specific Environment Variables: |
||||
|
||||
To find all the variables containing a certain character or pattern, use the `grep` command: |
||||
|
||||
```console |
||||
$ printenv | grep "W" |
||||
HOMEBREW_PREFIX=/home/linuxbrew/.linuxbrew |
||||
HOMEBREW_SHELLENV_PREFIX=/home/linuxbrew/.linuxbrew |
||||
PWD=/home/user/Documents/ |
||||
WINDOWPATH=2 |
||||
OLDPWD=/home/user/Public |
||||
``` |
||||
|
||||
- awk. The awk command is a Linux tool and programming language that allows users to process and manipulate data and produce formatted reports. |
||||
|
||||
This flag will come in handy: |
||||
|
||||
`-F` [separator] Used to specify a file separator. The default separator is a blank space. |
||||
|
||||
```console |
||||
$ cat example.txt |
||||
Hello:my:name:is:John |
||||
$ awk -F ":" '{print $5}' example.txt |
||||
John |
||||
$ |
||||
``` |
||||
|
||||
> You have to use Man or Google to know more about commands flags, in order to solve this exercise! |
||||
> Google and Man will be your friends! |
||||
|
||||
### References |
||||
|
||||
- [printenv](https://www.gnu.org/software/coreutils/manual/html_node/printenv-invocation.html#printenv-invocation). |
||||
- [grep](https://www.gnu.org/software/grep/manual/grep.html). |
||||
- [awk](https://www.ibm.com/docs/en/zos/2.4.0?topic=descriptions-awk-process-programs-written-in-awk-language) |
Loading…
Reference in new issue