#! /usr/local/bin/bash
sep=`head -1 $1.header`
mail_txt=$2
subject=$3
SELECT $1 login Name | {
IFS="$sep"
while read line; do
set $line
addr=$1
shift
sed "s/#1/$1/g" $mail_txt > /tmp/$$.mail
mail -s "$subject" $addr < /tmp/$$.mail
echo "sent to $1, at $addr"
done
}
#! /usr/local/bin/bash
table="$1"
lock=${table}.lock
ret=`head -3 ${table}.header | {
read line; echo "sep=$line"
read line; echo "attr=$line"
read line; echo "keys=$line"
}`
eval $ret
shift
#Anzahl der Attribute pruefen
c_attr=`
( IFS=$sep; set $attr; echo -n $#)
`
if [ $# -ne $c_attr ]; then
echo $c_attr $#
echo "Falsche Anzahl der Attribute"
exit 1
fi
#Lock erzeugen, exit 3, falls Datei gesperrt
ln -s $table $lock 2>/dev/null
if [ $? -ne 0 ]; then
echo "$table: gesperrt"
exit 3
fi
#Wenn hier was schief laeuft, darf das Skript nicht sofort terminieren,
#da sonst der LOCK nicht entfernt wird
(
#Existiert der Schluessel schon
new_row=""
for i; do
new_row="$new_row${new_row:+$sep}$i"
done
new_key=`
echo $new_row | { IFS="$IFS$sep"; SELECT $table $keys; }
`
{ IFS="$IFS$sep"; SELECT $table $keys; }| grep "^$new_key\$" > /dev/null
if [ $? -eq 0 ]; then
echo "Datensatz mit gleichem Schlüssel existiert"
exit 2
fi
#Neue Zeile einfuegen
if [ -s ${table}.data ]; then
echo $new_row >> ${table}.data
else
echo $new_row > ${table}.data
fi
)
exit_code="$?"
#Tabelle freigeben
rm -f $lock
exit $exit_code
#! /usr/local/bin/bash
tablename=$1
trenner=$2
shift 2
attr=""
keys=""
for i; do
if [ ${i:0:1} = "-" ]; then
keys="$keys${keys:+$trenner}${i#\-}"
fi
attr="$attr${attr:+$trenner}${i#\-}"
done
{ echo "$trenner"; echo "$attr"; echo "$keys"; } > ${tablename}.header
#! /usr/local/bin/bash
sep="$2"
ret=`(
IFS=".=$IFS"
set $1
echo "tab1=$1; j1=$2; tab2=$3; j2=$4"
) `
eval $ret
j1=`CR_INDEX ${tab1}.header | grep "^\W$j1" | cut -f 3 `
j2=`CR_INDEX ${tab2}.header | grep "^\W$j2" | cut -f 3 `
shift 2
for i; do
sp=`CR_INDEX ${i%.*}.header | grep "^\W${i#*.}" | cut -f 3`
if [ ${i%.*} = $tab1 ]; then
sp="1.$sp"
else
sp="2.$sp"
fi
f="$f${f:+ }$sp"
done
sep_tab1=`head -1 ${tab1}.header`
cat ${tab1}.data | tr "$sep_tab1" "$sep" |
sort -t "$sep" -k $j1 > /tmp/$$.f1
sep_tab2=`head -1 ${tab2}.header`
cat ${tab2}.data | tr "$sep_tab2" "$sep" |
sort -t "$sep" -k $j2 > /tmp/$$.f2
join -t "$sep" -j1 $j1 -j2 $j2 -o $f /tmp/$$.f1 /tmp/$$.f2
Michael Lehn
5/20/1999