Bash I/O Redirection: Exercises, Solution and Explanation
1.
Write a Bash script that redirects the output of the ls command to a file named "test.txt". Print the content of list.txt.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Redirecting the output of the ls command to a file named "list.txt"
ls > test.txt
Explanation:
In the exercise above,
- The "ls" command lists the contents of the current directory.
- The > symbol is used for output redirection, which directs the output of the "ls" command to the file named "test.txt".
- When you run this script, it will execute the "ls" command and save its output to a file named 'test.txt' in the current directory.
2.
Write a Bash script that uses input redirection to read the contents of a file named "exec_stderr.txt" and then echoes those contents to the terminal.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Using input redirection to read the contents of "exec_stderr.txt" and echoing them to the terminal
cat < exec_stderr.txt
Explanation:
In the exercise above,
- The "cat" command is used for concatenating and displaying files. When used without any filenames, it reads from standard input.
- '<' symbol is used for input redirection, which directs the contents of the file "exec_stderr.txt" to the standard input of the "cat" command.
- The "cat" command then reads the contents of the 'exec_stderr.txt' file and echoes (displays) them to the terminal.
3.
Write a Bash script that uses both input and output redirection to read the contents of a file named "input.txt" and write them to a new file named "output.txt".
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Using input redirection to read the contents of "input.txt" and output redirection to write them to "output.txt"
cat < input.txt > output.txt
Explanation:
In the exercise above,
- The "cat" command is used for concatenating and displaying files. When used without any filenames, it reads from standard input.
- '<' symbol is used for input redirection, which directs the contents of the file "input.txt" to the standard input of the "cat" command.
- '>' symbol is used for output redirection, which directs the output of the "cat" command to the file "output.txt".
- The "cat" command reads the contents of the "input.txt" file and writes them to the 'output.txt' file.
4.
Write a Bash script that redirects the standard error (stderr) of a command to a file named "error.log".
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Redirecting the standard error (stderr) of a command to a file named "error.log"
command_that_might_generate_errors 2> error.log
Explanation:
In the exercise above,
- "command_that_might_generate_errors" represents the command that might generate errors.
- '2>' symbol is used for stderr redirection, which redirects the standard error (stderr) output of the command to the file "error.log".
5.
Write a Bash script that appends the output of the date command to a file named "log.txt" without overwriting its existing contents.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Appending the output of the date command to "log.txt" without overwriting its existing contents
date >> log.txt
Explanation:
In the exercise above,
- The "date" command is used to display the current date and time.
- ">>" symbol is used for output redirection, which appends the output of the "date" command to the file "log.txt" without overwriting its existing contents.
6.
Write a Bash script that redirects the output of the echo command to /dev/null to suppress any output.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Redirecting the output of the echo command to /dev/null to suppress any output
echo "This output will be suppressed" > /dev/null
Explanation:
In the exercise above,
- The "echo" command prints the string "This output will be suppressed".
- "> /dev/null" redirects the output of the "echo" command to "/dev/null", which is a special file that discards all data written to it. Therefore, any output generated by the "echo" command will be suppressed and not displayed in the terminal.
7.
Write a Bash script that redirects the output of a command to another command as input, such as ls | grep .txt to list only files with a ".txt" extension.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Redirecting the output of the ls command to grep as input, to list only files with a ".txt" extension
ls | grep '\.txt$'
Output:
file1.txt file2.txt input.txt output.txt sample.txt
Explanation:
In the exercise above,
- The "ls" command lists the contents of the current directory.
- The '|' symbol (pipe) is used to redirect the output of the "ls" command as input to the grep command.
- grep '\.txt$' filters the input from "ls", listing only lines that end with the ".txt" extension. \ is used to escape the dot . character in the regular expression pattern to match the literal dot character, and '$' represents the end of the line.
8.
Write a Bash script that uses input redirection to read a number from a file named "nums.txt" and then performs some arithmetic operation on it.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Using input redirection to read a number from "nums.txt"
# Performing arithmetic operation on the read number
read number < nums.txt
result=$((number * 2))
# Printing the result of the arithmetic operation
echo "The result of doubling the number from nums.txt is: $result"
Output:
The result of doubling the number from nums.txt is: 10
Explanation:
In the exercise above,
- read number < nums.txt reads the number from the file "nums.txt" and stores it in the variable number.
- result=$((number * 2)) performs the arithmetic operation of doubling the number stored in 'number' and assigns the result to the variable 'result'.
- Finally, the script prints the result of doubling the number from "nums.txt" to the terminal.
9.
Write a Bash script that redirects the output of a command to both the terminal and a file simultaneously, using the tee command.
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Redirecting the output of the command to both the terminal and a file using tee
ls -l | tee output.txt
Output:
total 0 -rw-r--r-- 1 rg rg 67 Apr 13 18:11 error.log -rw-r--r-- 1 rg rg 284 Apr 13 17:41 file1.txt -rw-r--r-- 1 rg rg 284 Apr 13 17:41 file2.txt -rw-r--r-- 1 rg rg 284 Apr 13 18:09 input.txt -rw-r--r-- 1 rg rg 2 Apr 13 18:15 nums.txt -rw-r--r-- 1 rg rg 284 Apr 13 18:10 output.txt -rw-r--r-- 1 rg rg 313 Apr 13 18:13 sample.txt drwxrwxrwx 1 rg rg 512 Jun 10 2022 test -rwxr-xr-x 1 rg rg 200 Apr 13 18:17 test.sh
Explanation:
In the exercise above,
- The ls -l command lists the contents of the current directory in long format.
- The | symbol (pipe) is used to redirect the output of the ls -l command as input to the tee command.
- tee output.txt redirects the output to both the terminal and a file named "output.txt". The "tee" command reads from standard input and writes to both standard output (the terminal) and the specified file.
10.
Write a Bash script that uses a heredoc to input multi-line text and redirects it to a file named "document.txt".
Code:
#!/bin/bash
# Shebang line: Indicates the path to the shell interpreter (in this case, bash)
# Using a heredoc to input multi-line text and redirecting it to a file named "document.txt"
cat < document.txt
This is line 1 of the document.
This is line 2 of the document.
This is line 3 of the document.
EOF
Explanation:
In the exercise above,
- <<EOF starts a heredoc block, which allows us to input multi-line text.
- The text within the heredoc block is then written to the file "document.txt".
- EOF marks the end of the heredoc block.
- When you run this script, it will create a file named "document.txt" with the specified multi-line text. Each heredoc block line will be written to the file "document.txt".
Bash Editor:
More to Come !
Do not submit any solution of the above exercises at here, if you want to contribute go to the appropriate exercise page.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/bash-script-exercises/input-output-redirection.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics