Modified 2022-09-19 by Stefanie Tellex
The learning objectives of this assignment are to familiarize you with basic Linux shell commands, standard input, standard output, standard error, and pipes. You will use these ideas when interacting with the Linux shell to operate your drone. Additionally you will use these ideas in the next section when working on the networking exercises.
Modified 2019-09-03 by matthewberg
When you enter a command in a shell, it executes a program. These programs read
from a stream, known as “standard input” and write to two output streams,
“standard output” and “standard error”. When you print
in python, it writes
its output to standard output. In another language, such as C, you use other
functions, such as printf
to write to standard output.
In addition to writing to standard output, a program can read from standard
input. The program cat
, short for concatenate, reads from standard input
and writes the result to standard output.
Modified 2019-09-03 by matthewberg
Write a python program that prints “Hello world” to standard output. Save
the program as hello1.py
and submit it.
Write a python program that prints “Hello world” to standard output using
sys.stdout
. Save the program as hello2.py
and submit it.
Write a bash script that prints “Hello World” to standard output. Save the
script as hello.sh
and submit it.
Modified 2022-09-24 by Stefanie Tellex
Write answers to questions 1-2 inshell.txt
. Submit this file.
Run cat
with no arguments. Why does cat
seem like it is hanging?
When you run cat
, type a message into your terminal, and press
Control-D
. Describe what cat
does. Make sure to include which streams
are being used, and for what purpose.
Write a python program my_cat.py
that reads a message from
standard input and prints to standard output, just as cat
does.
You only need to reproduce the behavior of cat
when run with no
arguments. Submit this file.
Modified 2022-09-24 by Stefanie Tellex
Pipes are used to redirect standard input, standard output, and standard error.
First, >
is used to redirect standard output to a file. For example, echo "Hello World" > test.txt
will write the string Hello World
to test.txt
. Write answers to questions 1-4 in shell.txt
. Submit this file.
Create files one.txt
, two.txt
and three.txt
that contain the strings
1
, 2
, and 3
, respectively using echo
and output redirect.
By convention, almost all shell programs read input from standard input, and
write their output to standard output. Any error messages are printed to
standard error. You can chain shell programs together by using |
. For
example, the program ls
writes the contents of a directory to standard
output. The program sort
reads from standard input, sorts what
it reads, and writes the sorted content to standard output. So you can use
ls | sort
to print out a sorted directory list. Read the man page for sort
(man sort
) to learn how to sort in reverse order. What is the bash script (using |
) that prints the contents of a directory in reverse alphabetical order?
Use cat
, |
and echo
to print hello world.
Do not write to any files
and use both commands one time.
This is not the simplest way to print hello world. Can you suggest a simpler way? (We asked you to do it the more complicated way to practice with pipes.)
sort -r
. It does not need to process any command line arguments.
Submit your script in a file called my_reverse_sort.py
. Do not submit this script in shell.txt
Modified 2020-10-08 by sageshoyu
In addition to standard input and standard output, there is a third stream, standard error. If there is an error in a chain of pipes, it will be printed to the terminal rather than buried in the input to the next program.
ls -a | sort > sorted.txt
puts all the names of files in
a directory sorted in alphabetical order into the file sorted.txt
. If you
modify the command to be ls -a -hippo | sort > sorted.txt
, what text is in
sorted.txt
, what is outputted as standard error, and why? Answer this question in shell.txt
. Submit this file.ls -a
instead
of sort
. Submit the file containing the script as my_sort_status.py
.