diff --git a/week-13/add.sh b/week-13/add.sh new file mode 100755 index 0000000..2e3a1a6 --- /dev/null +++ b/week-13/add.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# Champlain College SDEV-415-81 +# +# Linux/Unix Programming Week 13: Loops and Function - (2020/12/06) +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Write a script named add that takes two command line arguments and displays as output their sum. +# The script is required to contain a function named add that takes +# these two arguments and returns their sum. +# +# Your script should also verify that the user entered two and only +# two arguments at the command line. +# +# If the user does not execute the program correctly, +# an error should be display describing the correct usage. +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Written by Llewellyn van der Merwe , December 2020 +# Copyright (C) 2020. All Rights Reserved +# License GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +# addition function +function add() { + # do the sum ;) + num=$(echo $1 + $2 | bc) + # we return the sum + echo "The sum is $num" +} + +# help function +function show_help { + echo "================================================================" + echo $1 + cat << EOF +================================================================ +Usage: ${0##*/:-} [OPTION...] + +Provide two numbers as arguments + +Example run: + ${0##*/:-} 5 8 +The sum is 13 +=============================================================== +EOF + exit 1 +} + +# check enough arguments were passed +if [ $# -eq 2 ]; then + # check input is numbers + regex='^[0-9]+([\.][0-9]+)?$' + if [[ $1 =~ $regex && $2 =~ $regex ]]; then + # run main function + add "$1" "$2" + else + show_help "Error: Not a number" + fi +elif [ $# -gt 2 ]; then + show_help "Error: Too many arguments" +else + show_help "Error: Not enough arguments" +fi diff --git a/week-13/foodmenu.sh b/week-13/foodmenu.sh new file mode 100755 index 0000000..b6b0b94 --- /dev/null +++ b/week-13/foodmenu.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# Champlain College SDEV-415-81 +# +# Linux/Unix Programming Week 13: Loops and Function - (2020/12/06) +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# The Program will display a menu that a user can select an option from and get a little note ;) +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Write a script that will do the following: +# Provide a comment section at the top of the script, +# with your name, the date, and the purpose of the program. +# +# Use the select loop to produce a menu of foods. +# Produce output to resemble the following: +# 1) Steak and potatoes +# 2) Fish and chips +# 3) Soup and salad +# -------------------------- +# Please make a selection. 1 +# Stick to your ribs +# Watch your cholesterol. +# Enjoy your meal. +# -------------------------- +# Please make a selection. 2 +# British are coming! +# Enjoy your meal. +# -------------------------- +# Please make a selection. 3 +# Health foods… +# Dieting is so boring. +# Enjoy your meal. +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Written by Llewellyn van der Merwe , December 2020 +# Copyright (C) 2020. All Rights Reserved +# License GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +# basic main function ;) +function main() { + # some house cleaning + PS3_old=$PS3 + # some defaults + export PS3="Please make a selection: " + # Start our little Menu + select menu in \ + 'Steak and potatoes' \ + 'Fish and chips' \ + 'Soup and salad' \ + 'Done' + do + case $REPLY in + 1 ) ribsNotice;; + 2 ) britishNotice;; + 3 ) healthNotice;; + 4 ) + # final greeting + echo + echo "Goodbye! ${USER^}" + echo + exit 0;; + * ) + echo "Error select option 1..4";; + esac + # we can add a normal break here if the loop must just run once + # break; + done + # restore the default + export PS3=$PS3_old +} + +# Welcome... +function welcomeNotice() { + # get the current date + current_date=$(date +"%A %-d %b %Y"); + # set at the top of the menu (script) + echo "My name is Llewellyn" + echo "Today is $current_date" + echo "Welcome to the Café Prestige" + echo + echo "Here is our menu for the day." +} + +# Just to show the menu again (not ideal) +function reminderNotice(){ + echo + echo "Would you like another?" + echo "1) Steak and potatoes" + echo "2) Fish and chips" + echo "3) Soup and salad" + echo "4) Done" +} + +# Show the welcome notice +welcomeNotice + +# The menu notice for +# Steak and potatoes +function ribsNotice() { + echo + echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "Stick to your ribs" + echo "Watch your cholesterol." + echo "Enjoy your meal." + echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + reminderNotice +} +# The menu notice for +# Fish and chips +function britishNotice() { + echo + echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "British are coming!" + echo "Enjoy your meal." + echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + reminderNotice +} +# The menu notice for +# Soup and salad +function healthNotice() { + echo + echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "Health foods…" + echo "Dieting is so boring." + echo "Enjoy your meal." + echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + reminderNotice +} + +# run main.. lol +main diff --git a/week-13/loops_functions.log b/week-13/loops_functions.log new file mode 100644 index 0000000..a0e9fc9 --- /dev/null +++ b/week-13/loops_functions.log @@ -0,0 +1,91 @@ +Script started on 2020-12-07 06:17:57+02:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="130" LINES="27"] +]2; ~/Champlain/C/2_Week13_12_Week13_1 » exit./add.sh 3 64.2r[5@foodmenumcheckerls -la./mchecker.sh +Llewellyn, You have new mail +Llewellyn, You have new mail +^C +]2; ~/Champlain/C/2_Week13_12_Week13_1 » ./mchecker.sh exit./add.sh 3 64.2r[5@foodmenu +My name is Llewellyn +Today is Monday 7 Dec 2020 +Welcome to the Café Prestige + +Here is our menu for the day. +1) Steak and potatoes +2) Fish and chips +3) Soup and salad +4) Done +Please make a selection: 6 +Error select option 1..4 +Please make a selection: 1 + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +Stick to your ribs +Watch your cholesterol. +Enjoy your meal. +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +Would you like another? +1) Steak and potatoes +2) Fish and chips +3) Soup and salad +4) Done +Please make a selection: 2 + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +British are coming! +Enjoy your meal. +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +Would you like another? +1) Steak and potatoes +2) Fish and chips +3) Soup and salad +4) Done +Please make a selection: 3 + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +Health foods… +Dieting is so boring. +Enjoy your meal. +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +Would you like another? +1) Steak and potatoes +2) Fish and chips +3) Soup and salad +4) Done +Please make a selection: 4 + +Goodbye! Llewellyn + +]2; ~/Champlain/C/2_Week13_12_Week13_1 » ./foodmenu.sh mcheckerexit./add.sh 3 64.2r[5@foodmenuadd +================================================================ +Error: Not enough arguments +================================================================ +Usage: ./add.sh [OPTION...] + +Provide two numbers as arguments + +Example run: + ./add.sh 5 8 +The sum is 13 +=============================================================== +]2; ~/Champlain/C/2_Week13_12_Week13_1 » ./add.sh [5@foodmenumcheckerexit./add.sh 3 64.2r +================================================================ +Error: Not a number +================================================================ +Usage: ./add.sh [OPTION...] + +Provide two numbers as arguments + +Example run: + ./add.sh 5 8 +The sum is 13 +=============================================================== +]2; ~/Champlain/C/2_Week13_12_Week13_1 » ./add.sh 3 r[5@foodmenumcheckerexit./add.sh 3 64.2 +The sum is 67.2 +]2; ~/Champlain/C/2_Week13_12_Week13_1 » ./add.sh 3 64.2342 64.34. 64.343 64.34 +The sum is 96.64 +]2; ~/Champlain/C/2_Week13_12_Week13_1 » exit +exit + +Script done on 2020-12-07 06:19:57+02:00 [COMMAND_EXIT_CODE="0"] diff --git a/week-13/mchecker.sh b/week-13/mchecker.sh new file mode 100755 index 0000000..02c720b --- /dev/null +++ b/week-13/mchecker.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# Champlain College SDEV-415-81 +# +# Linux/Unix Programming Week 13: Loops and Function - (2020/12/06) +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Write a program called mchecker to check for new mail and +# write a message to the screen if new mail has arrived. +# The program will get the size of the mail spool file for the user. +# (The spool files are found in /var/spool/mail/$USER on Linux, +# Use the find command if you cannot locate the file.) +# The script will execute in a continuous loop, once every 30 seconds. +# Each time the loop executes, it will compare the size of the mail spool +# file with its size from the previous loop. If the new size is greater than +# the old size, a message will be printed on your screen, +# saying “Username, You have new mail”. +# The size of a file can be found by looking +# at the output from ls –l, wc –c or from the find command. +# +# Note: To test this, you can simply edit the spool file to add a new entry. +# (echo "More data" >> /var/spool/mail/$USER) +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +# +# Written by Llewellyn van der Merwe , December 2020 +# Copyright (C) 2020. All Rights Reserved +# License GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html +# +# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +# path to the spool mail file +FILENAME=/var/spool/mail/$USER +# check if this file exist +if [ ! -f $FILENAME ]; then + # give console error + echo "The mail spool file for $USER does not exist in [$FILENAME]." + # break out here + exit 1 +fi +# the size tracker +LASTFILESIZE=0 +# start the continuous loop +while true; do + FILESIZE=$(stat -c%s "$FILENAME") + if [[ $FILESIZE -gt $LASTFILESIZE ]]; then + # only give message if LASTFILESIZE is greater than 0 + if [[ $LASTFILESIZE -gt 0 ]]; then + # give notice to console + echo "${USER^}, You have new mail" + fi + # set the new size + LASTFILESIZE=$FILESIZE + fi + # run this check again every + # 30 seconds + sleep 30s +done