mirror of https://github.com/tLDP/LDP
new
This commit is contained in:
parent
07176b0865
commit
0afd58f25a
|
@ -0,0 +1,69 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# bashpodder.sh:
|
||||||
|
# By Linc 10/1/2004
|
||||||
|
# Find the latest script at http://linc.homeunix.org:8080/scripts/bashpodder
|
||||||
|
# Last revision 12/14/2004 - Many Contributors!
|
||||||
|
# If you use this and have made improvements or have comments
|
||||||
|
# drop me an email at linc dot fessenden at gmail dot com
|
||||||
|
# I'd appreciate it!
|
||||||
|
|
||||||
|
# ==> ABS Guide extra comments.
|
||||||
|
|
||||||
|
# ==> Author of this script has kindly granted permission
|
||||||
|
# ==>+ for inclusion in ABS Guide.
|
||||||
|
|
||||||
|
|
||||||
|
# ==> ################################################################
|
||||||
|
#
|
||||||
|
# ==> What is "podcasting"?
|
||||||
|
|
||||||
|
# ==> It's broadcasting "radio shows" over the Internet.
|
||||||
|
# ==> These shows can be played on iPods and other music file players.
|
||||||
|
|
||||||
|
# ==> This script makes it possible.
|
||||||
|
# ==> See documentation at the script author's site, above.
|
||||||
|
|
||||||
|
# ==> ################################################################
|
||||||
|
|
||||||
|
|
||||||
|
# Make script crontab friendly:
|
||||||
|
cd $(dirname $0)
|
||||||
|
# ==> Change to directory where this script lives.
|
||||||
|
|
||||||
|
# datadir is the directory you want podcasts saved to:
|
||||||
|
datadir=$(date +%Y-%m-%d)
|
||||||
|
# ==> Will create a directory with the name: YYYY-MM-DD
|
||||||
|
|
||||||
|
# Check for and create datadir if necessary:
|
||||||
|
if test ! -d $datadir
|
||||||
|
then
|
||||||
|
mkdir $datadir
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Delete any temp file:
|
||||||
|
rm -f temp.log
|
||||||
|
|
||||||
|
# Read the bp.conf file and wget any url not already in the podcast.log file:
|
||||||
|
while read podcast
|
||||||
|
do # ==> Main action follows.
|
||||||
|
file=$(wget -q $podcast -O - | tr '\r' '\n' | tr \' \" | sed -n 's/.*url="\([^"]*\)".*/\1/p')
|
||||||
|
for url in $file
|
||||||
|
do
|
||||||
|
echo $url >> temp.log
|
||||||
|
if ! grep "$url" podcast.log > /dev/null
|
||||||
|
then
|
||||||
|
wget -q -P $datadir "$url"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done < bp.conf
|
||||||
|
|
||||||
|
# Move dynamically created log file to permanent log file:
|
||||||
|
cat podcast.log >> temp.log
|
||||||
|
sort temp.log | uniq > podcast.log
|
||||||
|
rm temp.log
|
||||||
|
# Create an m3u playlist:
|
||||||
|
ls $datadir | grep -v m3u > $datadir/podcast.m3u
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# dict-lookup.sh
|
||||||
|
|
||||||
|
# This script looks up definitions in the 1913 Webster's Dictionary.
|
||||||
|
# This Public Domain dictionary is available for download
|
||||||
|
#+ from various sites, including
|
||||||
|
#+ Project Gutenberg (http://www.gutenberg.org/etext/247).
|
||||||
|
#
|
||||||
|
# Convert it from DOS to UNIX format (only LF at end of line)
|
||||||
|
#+ before using it with this script.
|
||||||
|
# Store the file in plain, uncompressed ASCII.
|
||||||
|
# Set DEFAULT_DICTFILE variable below to filename and path.
|
||||||
|
|
||||||
|
|
||||||
|
E_BADARGS=65
|
||||||
|
MAXCONTEXTLINES=50 # Maximum number of lines to show.
|
||||||
|
DEFAULT_DICTFILE="webster1913-dict.txt" # Default dictionary file name/path.
|
||||||
|
# Change this as necessary.
|
||||||
|
# Note:
|
||||||
|
# ----
|
||||||
|
# The particular edition of the 1913 Webster's
|
||||||
|
#+ begins each entry with an uppercase letter
|
||||||
|
#+ (lowercase for the remaining characters).
|
||||||
|
# Only the very first line of an entry begins this way,
|
||||||
|
#+ and that's why the search algorithm below works.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -z $(echo "$1" | sed -n '/^[A-Z]/p') ]]
|
||||||
|
# Must at least specify word to look up, and
|
||||||
|
#+ it must start with an uppercase letter.
|
||||||
|
then
|
||||||
|
echo "Usage: `basename $0` Word-to-define [dictionary-file]"
|
||||||
|
echo
|
||||||
|
echo "Note: Word to look up must start with capital letter,"
|
||||||
|
echo "with the rest of the word in lowercase."
|
||||||
|
echo "--------------------------------------------"
|
||||||
|
echo "Examples: Abandon, Dictionary, Marking, etc."
|
||||||
|
exit $E_BADARGS
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -z "$2" ] # May specify different dictionary.
|
||||||
|
then
|
||||||
|
dictfile=$DEFAULT_DICTFILE
|
||||||
|
else
|
||||||
|
dictfile="$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
Definition=$(fgrep -A $MAXCONTEXTLINES "$1 \\" "$dictfile")
|
||||||
|
# Definitions in form "Word \..."
|
||||||
|
#
|
||||||
|
# And, yes, "fgrep" is fast enough to search
|
||||||
|
#+ even a very large text file.
|
||||||
|
|
||||||
|
|
||||||
|
# Now, snip out just the definition block.
|
||||||
|
|
||||||
|
echo "$Definition" |
|
||||||
|
sed -n '1,/^[A-Z]/p' |
|
||||||
|
# Print from first line of output
|
||||||
|
#+ to the first line of the next entry.
|
||||||
|
sed '$d' | sed '$d'
|
||||||
|
# Delete last two lines of output
|
||||||
|
#+ (blank line and first line of next entry).
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Exercises:
|
||||||
|
# ---------
|
||||||
|
# 1) Modify the script to accept any type of alphabetic input
|
||||||
|
# + (uppercase, lowercase, mixed case), and convert it
|
||||||
|
# + to an acceptable format for processing.
|
||||||
|
# See lines 18-20.
|
||||||
|
#
|
||||||
|
# 2) Convert the script to a GUI application,
|
||||||
|
# + using something like "gdialog" . . .
|
||||||
|
# The script will then no longer take its argument(s)
|
||||||
|
# + from the command line.
|
|
@ -0,0 +1,384 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# horserace.sh: very simple horserace simulation.
|
||||||
|
# Author: Stefano Palmeri
|
||||||
|
# Used with permission.
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# Goals of the script:
|
||||||
|
# playing with escape sequences and terminal colors.
|
||||||
|
#
|
||||||
|
# Exercise:
|
||||||
|
# Edit the script to make it run less randomly,
|
||||||
|
#+ set up a fake betting shop . . .
|
||||||
|
# Um . . . um . . . it's starting to remind me of a movie . . .
|
||||||
|
#
|
||||||
|
# The script gives each horse a random handicap.
|
||||||
|
# The odds are calculated upon horse handicap
|
||||||
|
#+ and are expressed in European(?) style.
|
||||||
|
# E.g.: odds=3.75 means that if you bet $1 and win,
|
||||||
|
#+ you receive $3.75.
|
||||||
|
#
|
||||||
|
# The script has been tested with a GNU/Linux OS,
|
||||||
|
#+ using xterm and rxvt, and konsole.
|
||||||
|
# On a machine with an AMD 900 MHz processor,
|
||||||
|
#+ the average race time is 75 seconds.
|
||||||
|
# On faster computers the race time would be lower.
|
||||||
|
# So, if you want more suspense, reset the USLEEP_ARG variable.
|
||||||
|
#
|
||||||
|
# Script by Stefano Palmeri.
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
E_RUNERR=65
|
||||||
|
|
||||||
|
# Check if md5sum and bc are installed.
|
||||||
|
if ! which bc &> /dev/null; then
|
||||||
|
echo bc is not installed.
|
||||||
|
echo "Can\'t run . . . "
|
||||||
|
exit $E_RUNERR
|
||||||
|
fi
|
||||||
|
if ! which md5sum &> /dev/null; then
|
||||||
|
echo md5sum is not installed.
|
||||||
|
echo "Can\'t run . . . "
|
||||||
|
exit $E_RUNERR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the following variable to slow down script execution.
|
||||||
|
# It will be passed as the argument for usleep (man usleep)
|
||||||
|
#+ and is expressed in microseconds (500000 = half a second).
|
||||||
|
USLEEP_ARG=0
|
||||||
|
|
||||||
|
# Clean up the temp directory, restore terminal cursor and
|
||||||
|
#+ terminal colors -- if script interrupted by Ctl-C.
|
||||||
|
trap 'echo -en "\E[?25h"; echo -en "\E[0m"; stty echo;\
|
||||||
|
tput cup 20 0; rm -fr $HORSE_RACE_TMP_DIR' TERM EXIT
|
||||||
|
# See the chapter on debugging for an explanation of 'trap.'
|
||||||
|
|
||||||
|
# Set a unique (paranoid) name for the temp directory the script needs.
|
||||||
|
HORSE_RACE_TMP_DIR=$HOME/.horserace-`date +%s`-`head -c10 /dev/urandom | md5sum | head -c30`
|
||||||
|
|
||||||
|
# Create the temp directory and move right in.
|
||||||
|
mkdir $HORSE_RACE_TMP_DIR
|
||||||
|
cd $HORSE_RACE_TMP_DIR
|
||||||
|
|
||||||
|
|
||||||
|
# This function moves the cursor to line $1 column $2 and then prints $3.
|
||||||
|
# E.g.: "move_and_echo 5 10 linux" is equivalent to
|
||||||
|
#+ "tput cup 4 9; echo linux", but with one command instead of two.
|
||||||
|
# Note: "tput cup" defines 0 0 the upper left angle of the terminal,
|
||||||
|
#+ echo defines 1 1 the upper left angle of the terminal.
|
||||||
|
move_and_echo() {
|
||||||
|
echo -ne "\E[${1};${2}H""$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to generate a pseudo-random number between 1 and 9.
|
||||||
|
random_1_9 () {
|
||||||
|
head -c10 /dev/urandom | md5sum | tr -d [a-z] | tr -d 0 | cut -c1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Two functions that simulate "movement," when drawing the horses.
|
||||||
|
draw_horse_one() {
|
||||||
|
echo -n " "//$MOVE_HORSE//
|
||||||
|
}
|
||||||
|
draw_horse_two(){
|
||||||
|
echo -n " "\\\\$MOVE_HORSE\\\\
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Define current terminal dimension.
|
||||||
|
N_COLS=`tput cols`
|
||||||
|
N_LINES=`tput lines`
|
||||||
|
|
||||||
|
# Need at least a 20-LINES X 80-COLUMNS terminal. Check it.
|
||||||
|
if [ $N_COLS -lt 80 ] || [ $N_LINES -lt 20 ]; then
|
||||||
|
echo "`basename $0` needs a 80-cols X 20-lines terminal."
|
||||||
|
echo "Your terminal is ${N_COLS}-cols X ${N_LINES}-lines."
|
||||||
|
exit $E_RUNERR
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Start drawing the race field.
|
||||||
|
|
||||||
|
# Need a string of 80 chars. See below.
|
||||||
|
BLANK80=`seq -s "" 100 | head -c80`
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
# Set foreground and background colors to white.
|
||||||
|
echo -ne '\E[37;47m'
|
||||||
|
|
||||||
|
# Move the cursor on the upper left angle of the terminal.
|
||||||
|
tput cup 0 0
|
||||||
|
|
||||||
|
# Draw six white lines.
|
||||||
|
for n in `seq 5`; do
|
||||||
|
echo $BLANK80 # Use the 80 chars string to colorize the terminal.
|
||||||
|
done
|
||||||
|
|
||||||
|
# Sets foreground color to black.
|
||||||
|
echo -ne '\E[30m'
|
||||||
|
|
||||||
|
move_and_echo 3 1 "START 1"
|
||||||
|
move_and_echo 3 75 FINISH
|
||||||
|
move_and_echo 1 5 "|"
|
||||||
|
move_and_echo 1 80 "|"
|
||||||
|
move_and_echo 2 5 "|"
|
||||||
|
move_and_echo 2 80 "|"
|
||||||
|
move_and_echo 4 5 "| 2"
|
||||||
|
move_and_echo 4 80 "|"
|
||||||
|
move_and_echo 5 5 "V 3"
|
||||||
|
move_and_echo 5 80 "V"
|
||||||
|
|
||||||
|
# Set foreground color to red.
|
||||||
|
echo -ne '\E[31m'
|
||||||
|
|
||||||
|
# Some ASCII art.
|
||||||
|
move_and_echo 1 8 "..@@@..@@@@@...@@@@@.@...@..@@@@..."
|
||||||
|
move_and_echo 2 8 ".@...@...@.......@...@...@.@......."
|
||||||
|
move_and_echo 3 8 ".@@@@@...@.......@...@@@@@.@@@@...."
|
||||||
|
move_and_echo 4 8 ".@...@...@.......@...@...@.@......."
|
||||||
|
move_and_echo 5 8 ".@...@...@.......@...@...@..@@@@..."
|
||||||
|
move_and_echo 1 43 "@@@@...@@@...@@@@..@@@@..@@@@."
|
||||||
|
move_and_echo 2 43 "@...@.@...@.@.....@.....@....."
|
||||||
|
move_and_echo 3 43 "@@@@..@@@@@.@.....@@@@...@@@.."
|
||||||
|
move_and_echo 4 43 "@..@..@...@.@.....@.........@."
|
||||||
|
move_and_echo 5 43 "@...@.@...@..@@@@..@@@@.@@@@.."
|
||||||
|
|
||||||
|
|
||||||
|
# Set foreground and background colors to green.
|
||||||
|
echo -ne '\E[32;42m'
|
||||||
|
|
||||||
|
# Draw eleven green lines.
|
||||||
|
tput cup 5 0
|
||||||
|
for n in `seq 11`; do
|
||||||
|
echo $BLANK80
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set foreground color to black.
|
||||||
|
echo -ne '\E[30m'
|
||||||
|
tput cup 5 0
|
||||||
|
|
||||||
|
# Draw the fences.
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++\
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
|
||||||
|
tput cup 15 0
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++\
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
|
||||||
|
# Set foreground and background colors to white.
|
||||||
|
echo -ne '\E[37;47m'
|
||||||
|
|
||||||
|
# Draw three white lines.
|
||||||
|
for n in `seq 3`; do
|
||||||
|
echo $BLANK80
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set foreground color to black.
|
||||||
|
echo -ne '\E[30m'
|
||||||
|
|
||||||
|
# Create 9 files to stores handicaps.
|
||||||
|
for n in `seq 10 7 68`; do
|
||||||
|
touch $n
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set the first type of "horse" the script will draw.
|
||||||
|
HORSE_TYPE=2
|
||||||
|
|
||||||
|
# Create position-file and odds-file for every "horse".
|
||||||
|
#+ In these files, store the current position of the horse,
|
||||||
|
#+ the type and the odds.
|
||||||
|
for HN in `seq 9`; do
|
||||||
|
touch horse_${HN}_position
|
||||||
|
touch odds_${HN}
|
||||||
|
echo \-1 > horse_${HN}_position
|
||||||
|
echo $HORSE_TYPE >> horse_${HN}_position
|
||||||
|
# Define a random handicap for horse.
|
||||||
|
HANDICAP=`random_1_9`
|
||||||
|
# Check if the random_1_9 function returned a good value.
|
||||||
|
while ! echo $HANDICAP | grep [1-9] &> /dev/null; do
|
||||||
|
HANDICAP=`random_1_9`
|
||||||
|
done
|
||||||
|
# Define last handicap position for horse.
|
||||||
|
LHP=`expr $HANDICAP \* 7 + 3`
|
||||||
|
for FILE in `seq 10 7 $LHP`; do
|
||||||
|
echo $HN >> $FILE
|
||||||
|
done
|
||||||
|
|
||||||
|
# Calculate odds.
|
||||||
|
case $HANDICAP in
|
||||||
|
1) ODDS=`echo $HANDICAP \* 0.25 + 1.25 | bc`
|
||||||
|
echo $ODDS > odds_${HN}
|
||||||
|
;;
|
||||||
|
2 | 3) ODDS=`echo $HANDICAP \* 0.40 + 1.25 | bc`
|
||||||
|
echo $ODDS > odds_${HN}
|
||||||
|
;;
|
||||||
|
4 | 5 | 6) ODDS=`echo $HANDICAP \* 0.55 + 1.25 | bc`
|
||||||
|
echo $ODDS > odds_${HN}
|
||||||
|
;;
|
||||||
|
7 | 8) ODDS=`echo $HANDICAP \* 0.75 + 1.25 | bc`
|
||||||
|
echo $ODDS > odds_${HN}
|
||||||
|
;;
|
||||||
|
9) ODDS=`echo $HANDICAP \* 0.90 + 1.25 | bc`
|
||||||
|
echo $ODDS > odds_${HN}
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# Print odds.
|
||||||
|
print_odds() {
|
||||||
|
tput cup 6 0
|
||||||
|
echo -ne '\E[30;42m'
|
||||||
|
for HN in `seq 9`; do
|
||||||
|
echo "#$HN odds->" `cat odds_${HN}`
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Draw the horses at starting line.
|
||||||
|
draw_horses() {
|
||||||
|
tput cup 6 0
|
||||||
|
echo -ne '\E[30;42m'
|
||||||
|
for HN in `seq 9`; do
|
||||||
|
echo /\\$HN/\\" "
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
print_odds
|
||||||
|
|
||||||
|
echo -ne '\E[47m'
|
||||||
|
# Wait for a enter key press to start the race.
|
||||||
|
# The escape sequence '\E[?25l' disables the cursor.
|
||||||
|
tput cup 17 0
|
||||||
|
echo -e '\E[?25l'Press [enter] key to start the race...
|
||||||
|
read -s
|
||||||
|
|
||||||
|
# Disable normal echoing in the terminal.
|
||||||
|
# This avoids key presses that might "contaminate" the screen
|
||||||
|
#+ during the race.
|
||||||
|
stty -echo
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Start the race.
|
||||||
|
|
||||||
|
draw_horses
|
||||||
|
echo -ne '\E[37;47m'
|
||||||
|
move_and_echo 18 1 $BLANK80
|
||||||
|
echo -ne '\E[30m'
|
||||||
|
move_and_echo 18 1 Starting...
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Set the column of the finish line.
|
||||||
|
WINNING_POS=74
|
||||||
|
|
||||||
|
# Define the time the race started.
|
||||||
|
START_TIME=`date +%s`
|
||||||
|
|
||||||
|
# COL variable needed by following "while" construct.
|
||||||
|
COL=0
|
||||||
|
|
||||||
|
while [ $COL -lt $WINNING_POS ]; do
|
||||||
|
|
||||||
|
MOVE_HORSE=0
|
||||||
|
|
||||||
|
# Check if the random_1_9 function has returned a good value.
|
||||||
|
while ! echo $MOVE_HORSE | grep [1-9] &> /dev/null; do
|
||||||
|
MOVE_HORSE=`random_1_9`
|
||||||
|
done
|
||||||
|
|
||||||
|
# Define old type and position of the "randomized horse".
|
||||||
|
HORSE_TYPE=`cat horse_${MOVE_HORSE}_position | tail -1`
|
||||||
|
COL=$(expr `cat horse_${MOVE_HORSE}_position | head -1`)
|
||||||
|
|
||||||
|
ADD_POS=1
|
||||||
|
# Check if the current position is an handicap position.
|
||||||
|
if seq 10 7 68 | grep -w $COL &> /dev/null; then
|
||||||
|
if grep -w $MOVE_HORSE $COL &> /dev/null; then
|
||||||
|
ADD_POS=0
|
||||||
|
grep -v -w $MOVE_HORSE $COL > ${COL}_new
|
||||||
|
rm -f $COL
|
||||||
|
mv -f ${COL}_new $COL
|
||||||
|
else ADD_POS=1
|
||||||
|
fi
|
||||||
|
else ADD_POS=1
|
||||||
|
fi
|
||||||
|
COL=`expr $COL + $ADD_POS`
|
||||||
|
echo $COL > horse_${MOVE_HORSE}_position # Store new position.
|
||||||
|
|
||||||
|
# Choose the type of horse to draw.
|
||||||
|
case $HORSE_TYPE in
|
||||||
|
1) HORSE_TYPE=2; DRAW_HORSE=draw_horse_two
|
||||||
|
;;
|
||||||
|
2) HORSE_TYPE=1; DRAW_HORSE=draw_horse_one
|
||||||
|
esac
|
||||||
|
echo $HORSE_TYPE >> horse_${MOVE_HORSE}_position # Store current type.
|
||||||
|
|
||||||
|
# Set foreground color to black and background to green.
|
||||||
|
echo -ne '\E[30;42m'
|
||||||
|
|
||||||
|
# Move the cursor to new horse position.
|
||||||
|
tput cup `expr $MOVE_HORSE + 5` `cat horse_${MOVE_HORSE}_position | head -1`
|
||||||
|
|
||||||
|
# Draw the horse.
|
||||||
|
$DRAW_HORSE
|
||||||
|
usleep $USLEEP_ARG
|
||||||
|
|
||||||
|
# When all horses have gone beyond field line 15, reprint odds.
|
||||||
|
touch fieldline15
|
||||||
|
if [ $COL = 15 ]; then
|
||||||
|
echo $MOVE_HORSE >> fieldline15
|
||||||
|
fi
|
||||||
|
if [ `wc -l fieldline15 | cut -f1 -d " "` = 9 ]; then
|
||||||
|
print_odds
|
||||||
|
: > fieldline15
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define the leading horse.
|
||||||
|
HIGHEST_POS=`cat *position | sort -n | tail -1`
|
||||||
|
|
||||||
|
# Set background color to white.
|
||||||
|
echo -ne '\E[47m'
|
||||||
|
tput cup 17 0
|
||||||
|
echo -n Current leader: `grep -w $HIGHEST_POS *position | cut -c7`" "
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
# Define the time the race finished.
|
||||||
|
FINISH_TIME=`date +%s`
|
||||||
|
|
||||||
|
# Set background color to green and enable blinking text.
|
||||||
|
echo -ne '\E[30;42m'
|
||||||
|
echo -en '\E[5m'
|
||||||
|
|
||||||
|
# Make the winning horse blink.
|
||||||
|
tput cup `expr $MOVE_HORSE + 5` `cat horse_${MOVE_HORSE}_position | head -1`
|
||||||
|
$DRAW_HORSE
|
||||||
|
|
||||||
|
# Disable blinking text.
|
||||||
|
echo -en '\E[25m'
|
||||||
|
|
||||||
|
# Set foreground and background color to white.
|
||||||
|
echo -ne '\E[37;47m'
|
||||||
|
move_and_echo 18 1 $BLANK80
|
||||||
|
|
||||||
|
# Set foreground color to black.
|
||||||
|
echo -ne '\E[30m'
|
||||||
|
|
||||||
|
# Make winner blink.
|
||||||
|
tput cup 17 0
|
||||||
|
echo -e "\E[5mWINNER: $MOVE_HORSE\E[25m"" Odds: `cat odds_${MOVE_HORSE}`"\
|
||||||
|
" Race time: `expr $FINISH_TIME - $START_TIME` secs"
|
||||||
|
|
||||||
|
# Restore cursor and old colors.
|
||||||
|
echo -en "\E[?25h"
|
||||||
|
echo -en "\E[0m"
|
||||||
|
|
||||||
|
# Restore echoing.
|
||||||
|
stty echo
|
||||||
|
|
||||||
|
# Remove race temp directory.
|
||||||
|
rm -rf $HORSE_RACE_TMP_DIR
|
||||||
|
|
||||||
|
tput cup 19 0
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,67 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# letter-count2.sh: Counting letter occurrences in a text file.
|
||||||
|
#
|
||||||
|
# Script by nyal [nyal@voila.fr].
|
||||||
|
# Used with permission.
|
||||||
|
# Recommented by document author.
|
||||||
|
# Version 1.1: Modified to work with gawk 3.1.3.
|
||||||
|
# (Will still work with earlier versions.)
|
||||||
|
|
||||||
|
|
||||||
|
INIT_TAB_AWK=""
|
||||||
|
# Parameter to initialize awk script.
|
||||||
|
count_case=0
|
||||||
|
FILE_PARSE=$1
|
||||||
|
|
||||||
|
E_PARAMERR=65
|
||||||
|
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
echo "Usage: letter-count.sh file letters" 2>&1
|
||||||
|
# For example: ./letter-count2.sh filename.txt a b c
|
||||||
|
exit $E_PARAMERR # Not enough arguments passed to script.
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -f "$1" ] ; then
|
||||||
|
echo "$1: No such file." 2>&1
|
||||||
|
usage # Print usage message and exit.
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$2" ] ; then
|
||||||
|
echo "$2: No letters specified." 2>&1
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
shift # Letters specified.
|
||||||
|
for letter in `echo $@` # For each one . . .
|
||||||
|
do
|
||||||
|
INIT_TAB_AWK="$INIT_TAB_AWK tab_search[${count_case}] = \"$letter\"; final_tab[${count_case}] = 0; "
|
||||||
|
# Pass as parameter to awk script below.
|
||||||
|
count_case=`expr $count_case + 1`
|
||||||
|
done
|
||||||
|
|
||||||
|
# DEBUG:
|
||||||
|
# echo $INIT_TAB_AWK;
|
||||||
|
|
||||||
|
cat $FILE_PARSE |
|
||||||
|
# Pipe the target file to the following awk script.
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------------
|
||||||
|
# Earlier version of script used:
|
||||||
|
# awk -v tab_search=0 -v final_tab=0 -v tab=0 -v nb_letter=0 -v chara=0 -v chara2=0 \
|
||||||
|
|
||||||
|
awk \
|
||||||
|
"BEGIN { $INIT_TAB_AWK } \
|
||||||
|
{ split(\$0, tab, \"\"); \
|
||||||
|
for (chara in tab) \
|
||||||
|
{ for (chara2 in tab_search) \
|
||||||
|
{ if (tab_search[chara2] == tab[chara]) { final_tab[chara2]++ } } } } \
|
||||||
|
END { for (chara in final_tab) \
|
||||||
|
{ print tab_search[chara] \" => \" final_tab[chara] } }"
|
||||||
|
# ----------------------------------------------------------------------------------
|
||||||
|
# Nothing all that complicated, just . . .
|
||||||
|
#+ for-loops, if-tests, and a couple of specialized functions.
|
||||||
|
|
||||||
|
exit $?
|
||||||
|
|
||||||
|
# Compare this script to letter-count.sh.
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Generic shell wrapper that performs an operation
|
||||||
|
#+ and logs it.
|
||||||
|
|
||||||
|
# Must set the following two variables.
|
||||||
|
OPERATION=
|
||||||
|
# Can be a complex chain of commands,
|
||||||
|
#+ for example an awk script or a pipe . . .
|
||||||
|
LOGFILE=
|
||||||
|
# Command-line arguments, if any, for the operation.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS="$@"
|
||||||
|
|
||||||
|
|
||||||
|
# Log it.
|
||||||
|
echo "`date` + `whoami` + $OPERATION "$@"" >> $LOGFILE
|
||||||
|
# Now, do it.
|
||||||
|
exec $OPERATION "$@"
|
||||||
|
|
||||||
|
# It's necessary to do the logging before the operation.
|
||||||
|
# Why?
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# spawn.sh
|
||||||
|
|
||||||
|
|
||||||
|
PIDS=$(pidof sh $0) # Process IDs of the various instances of this script.
|
||||||
|
P_array=( $PIDS ) # Put them in an array (why?).
|
||||||
|
echo $PIDS # Show process IDs of parent and child processes.
|
||||||
|
let "instances = ${#P_array[*]} - 1" # Count elements, less 1.
|
||||||
|
# Why subtract 1?
|
||||||
|
echo "$instances instance(s) of this script running."
|
||||||
|
echo "[Hit Ctl-C to exit.]"; echo
|
||||||
|
|
||||||
|
|
||||||
|
sleep 1 # Wait.
|
||||||
|
sh $0 # Play it again, Sam.
|
||||||
|
|
||||||
|
exit 0 # Not necessary; script will never get to here.
|
||||||
|
# Why not?
|
||||||
|
|
||||||
|
# After exiting with a Ctl-C,
|
||||||
|
#+ do all the spawned instances of the script die?
|
||||||
|
# If so, why?
|
||||||
|
|
||||||
|
# Note:
|
||||||
|
# ----
|
||||||
|
# Be careful not to run this script too long.
|
||||||
|
# It will eventually eat up too many system resources.
|
||||||
|
|
||||||
|
# Is having a script spawn multiple instances of itself
|
||||||
|
#+ an advisable scripting technique.
|
||||||
|
# Why or why not?
|
Loading…
Reference in New Issue