- function spacem()
- {
-#hmmm: could really use that pattern of 'iterate across all the arguments and do same thing' here.
-
-#hmmm: it actually seems like the below IS the pattern. it's pretty short, but i wish it could be shorter, like a function in itself.... ah.
-# couldn't we have a functionator deal that takes:
-# 1) a command to run, and
-# 2-n) arguments,
-# where the function just blithely runs that command on all of those arguments!?
-# yes! that does seem like the pattern being sought, much nicer than the goofy loop below,
-# although this functionator deal needs to handle when there are more than one command also,
-# or this very function couldn't be implemented...
-# maybe a two step process:
-# 1) build a list of commands to run on all arguments,
-# 2) then run through all the arguments passed in using those established commands.
-# yes again! this seems like it would meet all the needs involved and not be too irksome.
-# for the example below, this would reduce the number of lines, i think.
-# i had better stop bloviating and write this function so i can determine the number of
-# lines omitted by the new approach.
- while [ $# -gt 0 ]; do
- arg="$1"; shift
- # first we rename the file to be lower case.
- perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$arg" &>/dev/null
- # oops, now the name is all lower-case. we need to make the
- # same adjustment.
- arg2="$(echo "$arg" | tr A-Z a-z)"
- # we definitely wanted to adjust the case first, rather than doing all
- # the wacky stuff this script does to the filename... we will capture
- # the output of the replace operaton for reporting.
- final_name="$(perl "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg2")"
- # now zap the intermediate part of the name off.
- final_name="$(echo $final_name | sed -e 's/.*=> //')"
- # printout the combined operation results.
- echo "'$arg' => $final_name"
- done
+ # similar to replace_pattern_in_file, but also will add the new value
+ # when the old one did not already exist in the file.
+ function replace_if_exists_or_add()
+ {
+ local file="$1"; shift
+ local phrase="$1"; shift
+ local replacement="$1"; shift
+ if [ -z "$file" -o ! -f "$file" -o -z "$phrase" -o -z "$replacement" ]; then
+ echo "replace_if_exists_or_add: needs a filename, a phrase to replace, and the"
+ echo "text to replace that phrase with."
+ return 1
+ fi
+ grep "$phrase" "$file" >/dev/null
+ # replace if the phrase is there, otherwise add it.
+ if [ $? -eq 0 ]; then
+ replace_pattern_in_file "$file" "$phrase" "$replacement"
+ else
+ # this had better be the complete line.
+ echo "$replacement" >>"$file"
+ fi
+ }
+
+ ############################
+
+ # finds a variable (first parameter) in a particular property file
+ # (second parameter). the expected format for the file is:
+ # varX=valueX
+ function seek_variable()
+ {
+ local find_var="$1"; shift
+ local file="$1"; shift
+ if [ -z "$find_var" -o -z "$file" -o ! -f "$file" ]; then
+ echo -e "seek_variable: needs two parameters, firstly a variable name, and\nsecondly a file where the variable's value will be sought." 1>&2
+ return 1
+ fi
+
+ while read line; do
+ if [ ${#line} -eq 0 ]; then continue; fi
+ # split the line into the variable name and value.
+ IFS='=' read -a assignment <<< "$line"
+ local var="${assignment[0]}"
+ local value="${assignment[1]}"
+ if [ "${value:0:1}" == '"' ]; then
+ # assume the entry was in quotes and remove them.
+ value="${value:1:$((${#value} - 2))}"
+ fi
+ if [ "$find_var" == "$var" ]; then
+ echo "$value"
+ fi
+ done < "$file"
+ }
+
+ # finds a variable (first parameter) in a particular XML format file
+ # (second parameter). the expected format for the file is:
+ # ... name="varX" value="valueX" ...
+ function seek_variable_in_xml()
+ {
+ local find_var="$1"; shift
+ local file="$1"; shift
+ if [ -z "$find_var" -o -z "$file" -o ! -f "$file" ]; then
+ echo "seek_variable_in_xml: needs two parameters, firstly a variable name, and"
+ echo "secondly an XML file where the variable's value will be sought."
+ return 1
+ fi
+
+ while read line; do
+ if [ ${#line} -eq 0 ]; then continue; fi
+ # process the line to make it more conventional looking.
+ line="$(echo "$line" | sed -e 's/.*name="\([^"]*\)" value="\([^"]*\)"/\1=\2/')"
+ # split the line into the variable name and value.
+ IFS='=' read -a assignment <<< "$line"
+ local var="${assignment[0]}"
+ local value="${assignment[1]}"
+ if [ "${value:0:1}" == '"' ]; then
+ # assume the entry was in quotes and remove them.
+ value="${value:1:$((${#value} - 2))}"
+ fi
+ if [ "$find_var" == "$var" ]; then
+ echo "$value"
+ fi
+ done < "$file"
+ }
+
+ ############################
+
+ # goes to a particular directory passed as parameter 1, and then removes all
+ # the parameters after that from that directory.
+ function push_whack_pop()
+ {
+ local dir="$1"; shift
+ pushd "$dir" &>/dev/null
+ if [ $? -ne 0 ]; then echo failed to enter dir--quitting.; fi
+ rm -rf $* &>/dev/null
+ if [ $? -ne 0 ]; then echo received a failure code when removing.; fi
+ popd &>/dev/null
+ }
+
+# function spacem()
+# {
+# while [ $# -gt 0 ]; do
+# arg="$1"; shift
+# if [ ! -f "$arg" -a ! -d "$arg" ]; then
+# echo "=> did not find a file or directory named '$arg'."
+# continue
+# fi
+#
+# # first we will capture the output of the character replacement operation for reporting.
+# # this is done first since some filenames can't be properly renamed in perl (e.g. if they
+# # have pipe characters apparently).
+# intermediate_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg")"
+# local saw_intermediate_result=0
+# if [ -z "$intermediate_name" ]; then
+# # make sure we report something, if there are no further name changes.
+# intermediate_name="'$arg'"
+# else
+# # now zap the first part of the name off (since original name isn't needed).
+# intermediate_name="$(echo $intermediate_name | sed -e 's/.*=> //')"
+# saw_intermediate_result=1
+# fi
+#
+# # first we rename the file to be lower case.
+# actual_file="$(echo $intermediate_name | sed -e "s/'\([^']*\)'/\1/")"
+# final_name="$(perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$actual_file")"
+# local saw_final_result=0
+# if [ -z "$final_name" ]; then
+# final_name="$intermediate_name"
+# else
+# final_name="$(echo $final_name | sed -e 's/.*=> //')"
+# saw_final_result=1
+# fi
+##echo intermed=$saw_intermediate_result
+##echo final=$saw_final_result