From 51b6416a88fe8c485615b81e133dd01278c73924 Mon Sep 17 00:00:00 2001 From: Trevor Keller Date: Wed, 23 Apr 2025 12:53:55 -0400 Subject: [PATCH 1/2] Check goo script arguments to prevent data loss. --- episodes/data/shell-lesson-data.zip | Bin 460289 -> 460520 bytes .../north-pacific-gyre/goodiff.sh | 20 +++++++++++--- .../north-pacific-gyre/goostats.sh | 26 ++++++++++++++---- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/episodes/data/shell-lesson-data.zip b/episodes/data/shell-lesson-data.zip index 669359dec05ec750690b469dd05b2de6085e1f65..4859b9506a4231370d0fb240331faf003e9b9c61 100644 GIT binary patch delta 4971 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 IU?G40AAczRpa1{> diff --git a/shell-lesson-data/north-pacific-gyre/goodiff.sh b/shell-lesson-data/north-pacific-gyre/goodiff.sh index 4e7f30b7c..fe1ee7c97 100644 --- a/shell-lesson-data/north-pacific-gyre/goodiff.sh +++ b/shell-lesson-data/north-pacific-gyre/goodiff.sh @@ -1,13 +1,25 @@ +#!/bin/bash +# Incomplete goo comparator by Nelle Nemo. + # check for the right number of input arguments if [ $# -ne 2 ] then - echo "goodiff file1 file2" - echo "call goodiff with two arguments" - exit 1 + echo "call goodiff with two arguments:" + echo " $0 file1 file2" + exit 0 fi +# check read permissions +if [ ! -f "$1" ] +then + echo "error reading $1" + exit 2 +elif [ ! -f "$2" ] +then + echo "error reading $2" + exit 2 +fi -# difference of two input files # demo version, just return a random number or "files are identical" if [ "$1" == "$2" ] then diff --git a/shell-lesson-data/north-pacific-gyre/goostats.sh b/shell-lesson-data/north-pacific-gyre/goostats.sh index a3f06626e..57eaeed9d 100644 --- a/shell-lesson-data/north-pacific-gyre/goostats.sh +++ b/shell-lesson-data/north-pacific-gyre/goostats.sh @@ -1,10 +1,26 @@ +#!/bin/bash +# goostats.sh: a research script by Nelle Nemo +# Analyze "goo" input data and write "stats" to result file. + # check for the right number of input arguments if [ $# -ne 2 ] - then - echo "goostats file1 file2" - echo "call goostats with two arguments" - exit 1 +then + echo "call goostats with two arguments:" + echo " $0 input_file result_file" + exit 0 +fi + +# check if files already exist (good for $1, bad for $2) +if [ ! -a "$1" ] +then + echo "error reading input: $1" + exit 2 +elif [ -a "$2" ] +then + echo "error writing result: $2" + exit 2 fi +# run the numbers sleep 2 -head -n 3 $1 | cut -d , -f 1 | sort | uniq > $2 +head -n 3 "$1" | cut -d , -f 1 | sort | uniq > "$2" From 227bf84ebdad5aaf4db5b9322c195bbdefa70b40 Mon Sep 17 00:00:00 2001 From: Pariksheet Nanda Date: Mon, 18 Aug 2025 07:45:46 -0400 Subject: [PATCH 2/2] Invalid arguments triggering a usage message should return an error code Co-authored-by: Benson Muite --- shell-lesson-data/north-pacific-gyre/goodiff.sh | 2 +- shell-lesson-data/north-pacific-gyre/goostats.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shell-lesson-data/north-pacific-gyre/goodiff.sh b/shell-lesson-data/north-pacific-gyre/goodiff.sh index fe1ee7c97..9074c75d2 100644 --- a/shell-lesson-data/north-pacific-gyre/goodiff.sh +++ b/shell-lesson-data/north-pacific-gyre/goodiff.sh @@ -6,7 +6,7 @@ if [ $# -ne 2 ] then echo "call goodiff with two arguments:" echo " $0 file1 file2" - exit 0 + exit 1 fi # check read permissions diff --git a/shell-lesson-data/north-pacific-gyre/goostats.sh b/shell-lesson-data/north-pacific-gyre/goostats.sh index 57eaeed9d..d47e46d6d 100644 --- a/shell-lesson-data/north-pacific-gyre/goostats.sh +++ b/shell-lesson-data/north-pacific-gyre/goostats.sh @@ -7,7 +7,7 @@ if [ $# -ne 2 ] then echo "call goostats with two arguments:" echo " $0 input_file result_file" - exit 0 + exit 1 fi # check if files already exist (good for $1, bad for $2)