aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scripts')
-rw-r--r--examples/scripts/bash-hexdump.sh67
-rw-r--r--examples/scripts/timeout383
2 files changed, 109 insertions, 41 deletions
diff --git a/examples/scripts/bash-hexdump.sh b/examples/scripts/bash-hexdump.sh
new file mode 100644
index 0000000..310e55c
--- /dev/null
+++ b/examples/scripts/bash-hexdump.sh
@@ -0,0 +1,67 @@
+#From: "dennis" <dennis@netstrata.com>
+#To: <bash-maintainers@gnu.org>
+#Subject: New example script: bash-hexdump
+#Date: Mon, 4 Jan 2010 22:48:19 -0700
+#Message-ID: <6dbec42d$64fcdbd2$4a32cf2d$@com>
+
+#I've written a script that functions like "hexdump -C" or "hd". If you'd
+#like to include it in a future distribution of example Bash scripts, I have
+#included it here:
+
+#!/bin/bash
+# bash-hexdump# pure Bash, no externals
+# by Dennis Williamson - 2010-01-04
+# in response to
+http://stackoverflow.com/questions/2003803/show-hexadecimal-numbers-of-a-file
+# usage: bash-hexdump file
+saveIFS="$IFS"
+IFS="" # disables interpretation of \t, \n and space
+saveLANG="$LANG"
+LANG=C # allows characters > 0x7F
+bytecount=0
+valcount=0
+printf "%08x " $bytecount
+while read -d '' -r -n 1 char # -d '' allows newlines, -r allows \
+do
+ ((bytecount++))
+ # for information about the apostrophe in this printf command, see
+ # http://www.opengroup.org/onlinepubs/009695399/utilities/printf.html
+ printf -v val "%02x" "'$char"
+ echo -n "$val "
+ ((valcount++))
+ if [[ "$val" < 20 || "$val" > 7e ]]
+ then
+ string+="." # show unprintable characters as a dot
+ else
+ string+=$char
+ fi
+ if (( bytecount % 8 == 0 )) # add a space down the middle
+ then
+ echo -n " "
+ fi
+ if (( bytecount % 16 == 0 )) # print 16 values per line
+ then
+ echo "|$string|"
+ string=''
+ valcount=0
+ printf "%08x " $bytecount
+ fi
+done < "$1"
+
+if [[ "$string" != "" ]] # if the last line wasn't full, pad it out
+then
+ length=${#string}
+ if (( length > 7 ))
+ then
+ ((length--))
+ fi
+ (( length += (16 - valcount) * 3 + 4))
+ printf "%${length}s\n" "|$string|"
+ printf "%08x " $bytecount
+fi
+echo
+
+LANG="$saveLANG";
+IFS="$saveIFS"
+
+exit 0
diff --git a/examples/scripts/timeout3 b/examples/scripts/timeout3
index 5c19d2e..de650be 100644
--- a/examples/scripts/timeout3
+++ b/examples/scripts/timeout3
@@ -1,56 +1,57 @@
#!/bin/bash
#
-# The Bash shell script executes a command with a time-out.
-# Upon time-out expiration SIGTERM (15) is sent to the process. If the signal
+# The Bash script executes a command with a time-out.
+# Based on the Bash documentation example.
+#
+# Upon time-out expiration SIGTERM (15) is sent to the process. If the signal
# is blocked, then the subsequent SIGKILL (9) terminates it.
+# Dmitry V Golovashkin (E-mail: dvg@ieee.org)
#
-# Based on the Bash documentation example.
+script_name="${0##*/}"
-# Hello Chet,
-# please find attached a "little easier" :-) to comprehend
-# time-out example. If you find it suitable, feel free to include
-# anywhere: the very same logic as in the original examples/scripts, a
-# little more transparent implementation to my taste.
-#
-# Dmitry V Golovashkin <Dmitry.Golovashkin@sas.com>
+# Default values.
+readonly param_timeout=5
+readonly param_interval=1
+readonly param_delay=1
-scriptName="${0##*/}"
+declare -i timeout=param_timeout
+declare -i interval=param_interval
+declare -i delay=param_delay
-declare -i DEFAULT_TIMEOUT=9
-declare -i DEFAULT_INTERVAL=1
-declare -i DEFAULT_DELAY=1
+blue="$(tput setaf 4)"
+bold_red="$(tput bold; tput setaf 1)"
+off="$(tput sgr0)"
-# Timeout.
-declare -i timeout=DEFAULT_TIMEOUT
-# Interval between checks if the process is still alive.
-declare -i interval=DEFAULT_INTERVAL
-# Delay between posting the SIGTERM signal and destroying the process by SIGKILL.
-declare -i delay=DEFAULT_DELAY
+function print_usage() {
+cat <<EOF
-function printUsage() {
- cat <<EOF
+Synopsis: $script_name [-t timeout] [-i interval] [-d delay] command
-Synopsis
- $scriptName [-t timeout] [-i interval] [-d delay] command
- Execute a command with a time-out.
- Upon time-out expiration SIGTERM (15) is sent to the process. If SIGTERM
- signal is blocked, then the subsequent SIGKILL (9) terminates it.
+Executes the command with a time-out. Upon time-out expiration SIGTERM (15) is
+sent to the process. If SIGTERM signal is blocked, then the subsequent SIGKILL
+(9) terminates it.
- -t timeout
- Number of seconds to wait for command completion.
- Default value: $DEFAULT_TIMEOUT seconds.
+$blue-t timeout$off
+ Number of seconds to wait for command completion.
+ Default value: $param_timeout seconds. In some practical situations
+ this value ${bold_red}must$off be increased (for instance -t 180) to allow
+ the command to complete.
- -i interval
- Interval between checks if the process is still alive.
- Positive integer, default value: $DEFAULT_INTERVAL seconds.
+$blue-i interval$off
+ Interval between checks if the process is still alive.
+ Positive integer, default value: $param_interval seconds.
+ Default value is OK for most situations.
- -d delay
- Delay between posting the SIGTERM signal and destroying the
- process by SIGKILL. Default value: $DEFAULT_DELAY seconds.
+$blue-d delay$off
+ Delay between posting the SIGTERM signal and destroying the process by
+ SIGKILL. Default value: $param_delay seconds.
+ Default value is OK for most situations.
As of today, Bash does not support floating point arithmetic (sleep does),
-therefore all delay/time values must be integers.
+therefore all time values must be integers.
+Dmitry Golovashkin (E-mail: dvg@ieee.org)
EOF
+exit 1 # No useful work was done.
}
# Options.
@@ -59,7 +60,7 @@ while getopts ":t:i:d:" option; do
t) timeout=$OPTARG ;;
i) interval=$OPTARG ;;
d) delay=$OPTARG ;;
- *) printUsage; exit 1 ;;
+ *) print_usage ;;
esac
done
shift $((OPTIND - 1))
@@ -67,11 +68,10 @@ shift $((OPTIND - 1))
# $# should be at least 1 (the command to execute), however it may be strictly
# greater than 1 if the command itself has options.
if (($# == 0 || interval <= 0)); then
- printUsage
- exit 1
+ print_usage
fi
-# kill -0 pid Exit code indicates if a signal may be sent to $pid process.
+# kill -0 pid Exit code indicates if a signal may be sent to "pid" process.
(
((t = timeout))
@@ -89,3 +89,4 @@ fi
) 2> /dev/null &
exec "$@"
+