Blog | Embedl

Try your scripting skills

Written by Embedl | Jun 15, 2023 10:43:46 AM

Are you a Linux sysadmin? Try our new Bash challenge and win $100 gift card!

To excel as a Linux sysadmin, you need to possess a range of skills and knowledge. Firstly, a solid understanding of the Linux operating system is essential. You should be familiar with the command line interface, file systems, process management, and networking concepts. Proficiency in scripting languages like Bash or Python is also highly advantageous for automating tasks and writing custom scripts.

Furthermore, strong problem-solving and troubleshooting abilities are crucial for resolving system issues effectively. Attention to detail, organizational skills, and the ability to work under pressure are also important qualities for a Linux sysadmin.

Try to solve the questions below for the chance to win $100 gift card at desired online store. You have until June 19th to send us your answers. 

Email your answers to quiz@embedl.com 

 

Questions

These questions assume the shell is GNU Bash.

1. Failing pipes

A Linux command will typically return with exit code 0 if it’s been successful, and non-zero if there was an error (often exit code 1, unless the process is trying to tell us something specific). When using a pipe, more than one command is involved. Consider:

 grep == requirements.txt | sort | uniq

Will the command as a whole be successful if (a) grep fails, but sort and uniq run successfully, (b) sort fails, but grep and uniq run successfully, (c) uniq fails, but grep and sort run successfully, (d) all sub-commands are successful, (e) all sub-commands fail.

How can I test this? Is there any shell option to tweak this behavior?

 

2. Sorting standard error output

Assume there’s a command named mytestcommand that writes several lines to both standard output and standard error output. If we want to sort the lines that go to the standard output, we can do it with 

 mytestcommand | sort

Now, suppose we want to sort the standard error output instead. Can you do it (a) so that both stdout and stderr are sorted together? Can you do it (b) so that only stderr is sorted, but the stdout is left unaffected? 

 

3. Map that file

The mapfile command is built into Bash. It’s description is

Read lines from the standard input into the indexed array variable ARRAY, or from file descriptor FD if the -u option is supplied. The variable MAPFILE is the default ARRAY.

What is the difference between this pipe:

grep == requirements.txt | mapfile; echo "${#MAPFILE[*]}"

… and the following redirection?

mapfile < <(grep == requirements.txt); echo "${#MAPFILE[*]}"

Will they do the same thing? What is the advantage of using the < <() syntax? What is the advantage of using the pipe syntax? If I really want to use the pipe syntax, can we work around any potential issue with the first approach? (In a realistic scenario,  echo

may be replaced with some for loop over the entries in the array.)

 

4. exec redirections

What on Earth is happening here? Why would anyone do it like that? Will it even work?

local test_targets_file_write local test_targets_file_read declare -r test_targets_file=$(mktemp) exec {test_targets_file_write}>"$test_targets_file" exec {test_targets_file_read}<"$test_targets_file" rm "$test_targets_file" find tests -name 'test*.py' | \ testfile2targetname | \ sort >&"$test_targets_file_write" declare -a test_targets mapfile -t test_targets <&"$test_targets_file_read" readonly test_targets

 

5. The greater pipe

What does this do?

 grep == requirements.txt >| sort

Is this a file redirection or a command pipe? What’s the difference between > and | and >|? When would you use one or the other?

 

6. :(){ :|:;};:

What does this command do? Think it through before you try it.

 :(){ :|:;};:

 

7. If two people are equally good at bash scripting, this question will determine who gets the prize:

Embedl has most code in a monorepo. In this repository, what percentage of source lines of code (SLOC) are (A) Python, (B) Shell script and (C) other languages, as measured by David A. Wheeler's 'SLOCCount'?

Answer in percent with two decimal places. 

 

Email your answers to quiz@embedl.com