diff --git a/EOPSY/task1/.modify.sh.swp b/EOPSY/task1/.modify.sh.swp new file mode 100644 index 00000000..124be954 Binary files /dev/null and b/EOPSY/task1/.modify.sh.swp differ diff --git a/EOPSY/task1/modify.sh b/EOPSY/task1/modify.sh index 8ffe3757..da0e664b 100755 --- a/EOPSY/task1/modify.sh +++ b/EOPSY/task1/modify.sh @@ -1,20 +1,186 @@ #!/bin/bash +# command options and arguments interpreter example +# simple version -# Function to detect -h flag and show help for this script -show_help() { - local OPTIND - while getopts ":h" opt ; do - case "$opt" in - h ) - echo "This script modifies file names" - echo "-l lowerize file names" - echo "-u uppercase file names" - echo "-r recurse into directory" - echo "[-r] specify sed pattern that will be executed on file names" - echo "-h show this help information" - ;; - esac - done +# the name of the script without a path +name=`basename $0` + +help() +{ + echo "-l -> lowerize file/folder name" + echo "-u -> uppercase file/folder name" + echo "-r [-l|u] -> lowerize or uppercase file/folder name recursively" + echo " -> call sed command operating on file/folder name" + echo "-r -> call sed command operating on file/folder recursively" + echo "-h -> display this message" } -show_help "$@" + + + +uppercase() +{ + + if test -z "$1" + then + error_msg "missing filename for -u" + exit 1 + fi + mv "$1" $(echo "$1" | sed -r -e 's/.*/\U&/'); + + + +} + +lowercase() +{ + if test -z "$1" + then + error_msg "missing filename for -l" + exit 1 + fi + if test -f "$1" + then + if test -d "$1" + then + error_msg "$1 is neither a file nor the folder" + exit 2 + fi + fi + mv "$1" $(echo "$1" | sed -r -e 's/.*/\L&/'); +} + +sneed() +{ + if test -z "$1" + then + error_msg "missing sed pattern" + exit 1 + fi + if test -z "$2" + then + error_msg "missing sed filename" + exit 2 + fi + echo "$1" + echo $1 + mv "$2" $(echo "$2" | sed $1) +} + +recursionSneed() +{ + if test -z "$1" + then + error_msg "missing sed pattern" + exit 1 + fi + + if test -z "$2" + then + error_msg "missing sed filename" + exit 2 + fi + + if test -d "$2" + then + sneed "$1" "$2" + cd "$2" + for file in * + do + recursionSneed "$1" "$file" + done + fi + + if test -f "$2" + then + sneed "$1" "$2" + fi + + + +} + +recursionLowercase() +{ + lowercase "$1" + set "$(echo "$1" | sed -r -e 's/.*/\L&/')" + for item in "$1"/* + do + if test -d "$item" + then + recursionLowercase "$item" + fi + if test -f "$item" + then + lowercase "$item" + fi + done +} + +recursionUppercase() +{ + uppercase "$1" + set "$(echo "$1" | sed -r -e 's/.*/\L&/')" + for item in "$1"/* + do + if test -d "$item" + then + recursionUppercase "$item" + fi + if test -f "$item" + then + uppercase "$item" + fi + done + +} + +recursion() +{ + if test -z "$1" + then + error_msg "missing argument for -r" + exit 1 + fi + + case "$1" in + -l|--lowercase) recursionLowercase "$2";; + -u|--uppercase) recursionUppercase "$2";; + *) recursionSneed "$1" "$2";; + esac +} + + + +# function for printing error messages to diagnostic output +error_msg() +{ + echo "$name: error: $1" 1>&2 +} + +# function for servicing -w option + + +# if no arguments given +if test -z "$1" +then + help +fi + + +# do with command line arguments +while test "x$1" != "x" +do + case "$1" in + -h|--help) help;; + -l|--lowercase) lowercase "$2";; + -r|--recursion) recursion "$2" "$3" ;; + -u|--upercase) uppercase "$2";; + *) sneed "$1" "$2" ;; + esac + shift +done + + + +