Add a couple of questions
This commit is contained in:
13
exercises/shell/solutions/basic_date.md
Normal file
13
exercises/shell/solutions/basic_date.md
Normal file
@ -0,0 +1,13 @@
|
||||
## Basic Date
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Write a script that will put the current date in a file called "the_date.txt"
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
echo $(date) > the_date.txt
|
||||
```
|
24
exercises/shell/solutions/count_chars.md
Normal file
24
exercises/shell/solutions/count_chars.md
Normal file
@ -0,0 +1,24 @@
|
||||
## Count Chars
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Read input from the user until you get empty string
|
||||
2. For each of the lines you read, count the number of characters and print it
|
||||
|
||||
### Constraints
|
||||
|
||||
1. You must use a while loop
|
||||
2. Assume at least three lines of input
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
echo -n "Please insert your input: "
|
||||
|
||||
while read line; do
|
||||
echo -n "$line" | wc -c
|
||||
echo -n "Please insert your input: "
|
||||
done
|
||||
```
|
20
exercises/shell/solutions/empty_files.md
Normal file
20
exercises/shell/solutions/empty_files.md
Normal file
@ -0,0 +1,20 @@
|
||||
## Empty Files
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Write a script to remove all the empty files in a given directory (including nested directories)
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#! /bin/bash
|
||||
for x in *
|
||||
do
|
||||
if [ -s $x ]
|
||||
then
|
||||
continue
|
||||
else
|
||||
rm -rf $x
|
||||
fi
|
||||
done
|
||||
```
|
20
exercises/shell/solutions/factors.md
Normal file
20
exercises/shell/solutions/factors.md
Normal file
@ -0,0 +1,20 @@
|
||||
## Shell Scripting - Factors
|
||||
|
||||
### Objectives
|
||||
|
||||
Write a script that when given a number, will:
|
||||
|
||||
* Check if the number has 2 as factor, if yes it will print "one factor"
|
||||
* Check if the number has 3 as factor, if yes it will print "one factor...actually two!"
|
||||
* If none of them (2 and 3) is a factor, print the number itself
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
(( $1 % 2 )) || res="one factor"
|
||||
(( $1 % 3 )) || res+="...actually two!"
|
||||
|
||||
echo ${res:-$1}
|
||||
```
|
17
exercises/shell/solutions/files_size.md
Normal file
17
exercises/shell/solutions/files_size.md
Normal file
@ -0,0 +1,17 @@
|
||||
## Files Size
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Print the name and size of every file and directory in current path
|
||||
|
||||
Note: use at least one for loop!
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
for i in $(ls -S1); do
|
||||
echo $i: $(du -sh "$i" | cut -f1)
|
||||
done
|
||||
```
|
15
exercises/shell/solutions/great_day.md
Normal file
15
exercises/shell/solutions/great_day.md
Normal file
@ -0,0 +1,15 @@
|
||||
## Great Day
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Write a script that will print "Today is a great day!" unless it's given a day name and then it should print "Today is <given day>"
|
||||
|
||||
Note: no need to check whether the given argument is actually a valid day
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
echo "Today is ${1:-a great day!}"
|
||||
```
|
15
exercises/shell/solutions/hello_world.md
Normal file
15
exercises/shell/solutions/hello_world.md
Normal file
@ -0,0 +1,15 @@
|
||||
## Shell Scripting - Hello World
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Define a variable with the string 'Hello World'
|
||||
2. Print the value of the variable you've defined and redirect the output to the file "amazing_output.txt"
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
HW_STR="Hello World"
|
||||
echo $HW_STR > amazing_output.txt
|
||||
```
|
20
exercises/shell/solutions/host_status.md
Normal file
20
exercises/shell/solutions/host_status.md
Normal file
@ -0,0 +1,20 @@
|
||||
## It's Alive!
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Write a script to determine whether a given host is down or up
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
SERVERIP=<IP Address>
|
||||
NOTIFYEMAIL=test@example.com
|
||||
|
||||
ping -c 3 $SERVERIP > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
# Use mailer here:
|
||||
mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null
|
||||
fi
|
||||
```
|
26
exercises/shell/solutions/num_of_args.md
Normal file
26
exercises/shell/solutions/num_of_args.md
Normal file
@ -0,0 +1,26 @@
|
||||
## Number of Arguments
|
||||
|
||||
### Objectives
|
||||
|
||||
* Write a script that will print "Got it: <argument value>" in case of one argument
|
||||
* In case no arguments were provided, it will print "Usage: ./<program name> <argument>"
|
||||
* In case of more than one argument, print "hey hey...too many!"
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
main() {
|
||||
case $# in
|
||||
0) printf "%s" "Usage: ./<program name> <argument>"; return 1 ;;
|
||||
1) printf "%s" "Got it: $1"; return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
```
|
||||
|
30
exercises/shell/solutions/sum.md
Normal file
30
exercises/shell/solutions/sum.md
Normal file
@ -0,0 +1,30 @@
|
||||
## Sum
|
||||
|
||||
### Objectives
|
||||
|
||||
1. Write a script that gets two numbers and prints their sum
|
||||
3. Make sure the input is valid (= you got two numbers from the user)
|
||||
2. Test the script by running and passing it two numbers as arguments
|
||||
|
||||
### Constraints
|
||||
|
||||
1. Use functions
|
||||
|
||||
### Solution
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
re='^[0-9]+$'
|
||||
|
||||
if ! [[ $1 =~ $re && $2 =~ $re ]]; then
|
||||
echo "Oh no...I need two numbers"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
function sum {
|
||||
echo $(( $1 + $2 ))
|
||||
}
|
||||
|
||||
sum $1 $2
|
||||
```
|
Reference in New Issue
Block a user