[linux] Hey you script, be quiet when all is well!

Remko Bolt remko op cluebox.org
Ma Jan 29 23:33:14 CET 2007


Speciaal voor de script kiddies... Uh, ik bedoel Bash experts:

Het onderstaande script geeft me wat problemen. Het werkt verder goed
(constructieve kritiek/tips altijd welkom) alleen ik krijg het niet voor
elkaar om het `stil' te laten zijn:

getsomething: line 62: 8309 Done { echo -e
$line1$line2$line3$line4$line5$line6"\n\n"; }
8310 Hangup | openssl s_client -quiet -bugs -connect
$host:443 >>result-$tag

Nu ben ik wat aan het uitproberen geslagen en heb gemerkt dat je of een
Hangup of een Done krijgt. Hoe kom ik daar vanaf?

sheba:~$ sleep 60 &
[3] 22463
sheba:~$ kill -HUP 22463
sheba:~$
[3]+  Hangup                  sleep 60

sheba:~$ sleep 1 &
[3] 22464
sheba:~$
[3]+  Done                    sleep 1

----------------------
#!/bin/bash
# getsomething: (description here :-)

TMP_DIR=/home/remko/tmp
cd $TMP_DIR

host="www.somewhere.org"
tag=$RANDOM
persno=${1%%:*}
credentials=`echo -n $1 | uuencode -m - | sed -n '2 p' -`

line1="POST /members/assignments/bin/roster.cmd HTTP/1.1\n"
line2="Host: $host\n"
line3="Authorization: Basic "$credentials"\n"
line4="Content-Type: application/x-www-form-urlencoded\n"
line6="persno="$persno"&version=current"
line5="Content-Length: "${#line6}"\n"

echo -e "\r" >result-$tag
{
echo -e $line1$line2$line3$line4$line5$line6"\n\n"
} | openssl s_client -quiet -bugs -connect $host:443 \
 >>result-$tag
PROC=$!
sleep 2
kill -HUP $PROC
# This could be a bit more sofisticated. Maybe check the
# last line of result-$tag and match it or time out.

if [ `cat result-$tag | wc -c` == "2" ]; then
    echo "`basename $0`: connection failed." > /dev/stderr
    exit_status=64
else
    if grep "Indeling van:" result-$tag &>/dev/null; then
        # This is an ugly hack to remove garbage in between
        # windows line-endings. Where does it come from?
        sed -e :l -e '/\r$/N; s/\r\n/\r/; tl' result-$tag \
        | sed -e '/\r.*\r/d' - | sed -e '/^\r/d'
        exit_status=0
    else
        echo "`basename $0`: no roster received." > /dev/stderr
        exit_status=65
    fi
fi
rm result-$tag
exit $exit_status



More information about the Linux mailing list