#!/bin/bash ############################################################################### # # SENDSMS -- Script to send sms by 'gnokii' # Author : Gabriele Zappi - Rimini # History: # feb 17, 2001 Script created (v1.0) ############################################################################### ############################################################################### ############################################################################### # PROGNAME=`basename $0` # var settings. PROGNAME=${0##*/} VERSION="1.02" GNOKII=./gnokii PID=$$ SMSDIR=~/tmp/sms TMP=~/tmp/SMStmp.$PID BACKTITLE="SENDSMS V$VERSION" AUTHOR="Gabriele Zappi - Rimini " help() { echo "$PROGNAME: $BACKTITLE - A gnokii interface for sending SMS." echo "Written by $AUTHOR" echo -e "\ \n\ Usage: $PROGNAME [OPTION]...\n\ \n\ Examples:\n\ $PROGNAME # simply run $PROGNAME in standard mode\n\ $PROGNAME --simulate # Simulates. doesn't really send sms (for debug)\n\ echo \"Hello Beauty ;-)\" | $PROGNAME --smsset\n\ # Preset \"Hello Beauty ;-)\" as SMS message.\n\ $PROGNAME --smsset < mymessage.txt\n\ # Preset contents of file mymessage.txt \n\ as SMS message.\n\ $PROGNAME --version # Display version, author and quits.\n\ \n\ NOTE:\n\ If you require to pickup number from phone's memory (really from SIM card),\n\ for the first time, it anyway reads phonebook from your cellular phone. \n\ (It may take a while... please, be patient ;-) \n\ \n\ Available options:\n\ --debug, -D May bother with more debugging messages ;-)\n\ For debugging purpose.\n\ --simul[ate], -S Simulation mode. Doesn't really send SMS by phone. \n\ Only simulates. For debugging purpose.\n\ --forcememread, -F Forces $PROGNAME to read phonebook from SIM card,\n\ and to parse the generated file in order to update\n\ the numbers' list (useful only if required to pickup\n\ number from the phone's memory). see NOTE.\n\ --skipgnokiicheck, -K Skip the test of the presence of binary 'gnokii'.\n\ (It must be somewhere in your \$PATH). It allows you\n\ to try this script program, even if you don't have\n\ 'gnokii' already. ;)\n\ --smsset, --setsms Allows you to preset a SMS message from STDIN. (pipe\n\ or input redirection).\n\ This message will be proposed on the 'SMS message'\n\ field during the program input cycle.\n\ --help, -h, /h display this help and exit\n\ --version, -V output version information and exit" echo exit 0 } acex() { rm -rf $TMP >/dev/null 2>&1 clear exit $1 } parse_stdin() { # Switch initialization SW_DEBUG=no SW_SIMUL=no SW_FORCEMREAD=no SW_SKIPGNOKITST=no SW_PRESETSMS=no PRESETSMS="" while [ -n "$1" ] do case "$1" in --help|-h|/h) help ;; --version|-V) echo echo "$BACKTITLE - A gnokii interface for sending SMS." echo "Written by $AUTHOR" echo exit 0 ;; --simul*|-S) SW_SIMUL=yes ;; --debug*|-D) SW_DEBUG=yes SW_SIMUL=yes ;; --forcememread|-F) SW_FORCEMREAD=yes ;; --skipgnokiicheck|-K) SW_SKIPGNOKITST=yes ;; --smsset|--msgset|--setsms) SW_PRESETSMS=yes # will read from stdin echo "reading sms from stdin .." PRESETSMS=`cat` ;; *) echo "$PROGNAME: Invalid parameter: " help ;; esac shift done } sure_to_quit() { dialog --backtitle "$BACKTITLE" \ --yesno "Really sure to quit? " 6 50 if [ $? -eq 0 ]; then acex 0 fi } SMS_phoneread() { dialog --backtitle "$BACKTITLE" --infobox "Reading phonebook by phone's SIM\n Please wait" 4 40 $GNOKII --getmemory SM 1 130 > $SMSDIR/.SMlist.temp } SMS_choicefrommem() { # read from phonebook. if [ "$SW_FORCEMREAD" = "yes" ] ; then readsim=1 elif [ -s $SMSDIR/.SMlist.sim ]; then dialog --backtitle "INSERT NUMBER(s).." \ --yesno "A SIM phonebook file is already present. \ Do you want to read phone memory anyway?" 8 60 if [ $? -eq 0 ] ; then readsim=1 else readsim=0 fi else readsim=1 fi ERROR=0 if [ $readsim -eq 1 ] ; then SMS_phoneread if [ $? -ne 0 ] ; then dialog --backtitle "INSERT NUMBER(s).." \ --msgbox "ERROR during reading memory from your phone... \ Insert manually destination number." 8 60 ERROR=1 else mv -f $SMSDIR/.SMlist.temp $SMSDIR/.SMlist.sim fi fi if [ $ERROR -eq 0 ]; then # Parsing sim file... if [ ! -s $SMSDIR/.SMlist.chklst -o ! -s $SMSDIR/.SMlist.choice \ -o $readsim -eq 1 ] ; then > $SMSDIR/.SMlist.menu > $SMSDIR/.SMlist.chklst > $SMSDIR/.SMlist.choice totrows=`cat $SMSDIR/.SMlist.sim | wc -l` rownow=0 (while read riga do rownow=`expr $rownow + 1` perc=`expr $rownow \* 100 / $totrows` pos=`echo $riga | cut -f4 -d";"` name=`echo $riga | cut -f1 -d";"` num=`echo $riga | cut -f2 -d";"` if [ -n "$pos" -a -n "$num" ] ; then echo -e "$pos \"$name - $num\"" >> $SMSDIR/.SMlist.menu echo -e "$pos \"$name - $num\" off" >> $SMSDIR/.SMlist.chklst echo "$pos;$num" >> $SMSDIR/.SMlist.choice fi echo $perc done < $SMSDIR/.SMlist.sim) | dialog \ --gauge "Parsing phonebook file..." 12 70 0 fi chkok=0 option=0 while [ $chkok -eq 0 ] do eval dialog --backtitle \"SENDSM CKECKLIST\" \ --checklist \"Check your MEMORY number\(s\).\ \\nPress ESC key \for options..... \" \ 16 60 9 \ `cat $SMSDIR/.SMlist.chklst` 2> $TMP/rspTEMP02 option=$? if [ $option -eq 255 ] ; then dialog --backtitle "SENDSM CKECKLIST" --menu \ "Options sub-menus for Phonebook choise list:" \ 10 50 4 \ "1" "Sort by Memory Pos" \ "2" "Sort by Names" \ "9" "Quit $PROGNAME" 2> $TMP/rspTEMP04 if [ $? -eq 0 ]; then sorttype=`cat $TMP/rspTEMP04` case $sorttype in 1) sort -n $SMSDIR/.SMlist.chklst > $TMP/.SMlist.tmp mv -f $TMP/.SMlist.tmp $SMSDIR/.SMlist.chklst ;; 2) sort +1 $SMSDIR/.SMlist.chklst > $TMP/.SMlist.tmp mv -f $TMP/.SMlist.tmp $SMSDIR/.SMlist.chklst ;; 9) sure_to_quit ;; esac fi else chkok=1 fi done if [ $? -eq 0 ] ; then for val in `cat $TMP/rspTEMP02` do tok1=`eval echo $val` tok2=`grep "^$tok1;" $SMSDIR/.SMlist.choice` tok3=`echo $tok2 | cut -f2 -d";"` if [ -z "$NUMBERS" ] ; then NUMBERS="$tok3" else NUMBERS="$NUMBERS $tok3" fi done fi fi } ########################################################################### ########################################################################### # MAIN PROCEDURE # ########################################################################### ########################################################################### parse_stdin $* # This is the 'help' test... # if [ "$1" = "--help" -o "$1" = "/h" ] ; then # help # fi if ! type -all "dialog" >/dev/null 2>&1 ; then echo echo "${PROGNAME}: error:" echo "Can't find 'dialog', i can't run without 'dialog' on your system." echo "You can get a compiled elf version of 'dialog' from here." echo "http://www.tux.org/pub/people/kent-robotti/index.html" echo "ftp://ftp.tux.org/pub/people/kent-robotti 'dialog-0.9a-15.elf.tar.gz'" echo exit 1 fi if [ $SW_SKIPGNOKITST = no ] ; then if ! type -all "$GNOKII" >/dev/null 2>&1 ; then echo echo "${PROGNAME}: error:" echo "Can't find 'gnokii'. This script needs 'gnokii' in order to work." echo "You can get a version of 'gnokii' from following links:" echo "GNOKII: http://multivac.fatburen.org/gnokii/ , http://www.gnokii.org/" echo echo " Pavel Janik (who is to thank for a vast part of the 6110 development) " echo "also keeps an ftp archive of some recent things." echo " " echo "Source code and pre-compiled binaries for gnokii are available from " echo "a number of sites" echo echo "ftp.gnokii.org located in California, USA" echo "linuxcare.com.au located in Canberra, Australia" echo "multivac.fatburen.org located in Stockholm, Sweden " echo echo "Pre release versions are kept here, maintained by Pawel Kot" echo "urtica.linuxnews.pl located in Warsaw, Poland" echo echo "MYGNOKII (can handle other newer Nokia models...)" echo "--------" echo "Marcin Wiacek -> mailto:marcin-wiacek@topnet.pl" echo "http://marcin-wiacek.topnet.pl (http://www.fkn.pl/marcinw) -> netmonitor," echo "firmware, mygnokii (GSM & Nokia)" echo "http://grumble.zereau.com/gnokii/ &" echo "http://www.mds.mdh.se/~cel95eig/mygnokii/ -> mygnokii mirrors" echo exit 1 fi fi if [ ! -d ~/tmp ]; then mkdir ~/tmp chmod 755 ~/tmp fi if [ ! -d $SMSDIR ]; then mkdir -p $SMSDIR chmod 755 $SMSDIR fi if [ -d $TMP ]; then rm -rf $TMP fi mkdir -p $TMP chmod 700 $TMP echo "$BACKTITLE" > $TMP/txtTEMP01 echo >> $TMP/txtTEMP01 echo "Written by Gabriele Zappi " >> $TMP/txtTEMP01 echo >> $TMP/txtTEMP01 echo "This script is a front-end to type SMS messages directly" >> $TMP/txtTEMP01 echo "from your computer and send them using gnokii through" >> $TMP/txtTEMP01 echo "your cellular phone connected to your computer." >> $TMP/txtTEMP01 echo >> $TMP/txtTEMP01 echo "Press [Enter] to continue with SENDSMS." >> $TMP/txtTEMP01 dialog --backtitle "$BACKTITLE" --textbox "$TMP/txtTEMP01" 14 70 TURN=0 while true do echo "Please, enter in the box below, your SMS message." > $TMP/txtTEMP$$ echo "Remember that it cannot be longer than 160 chars." >> $TMP/txtTEMP$$ echo " " >> $TMP/txtTEMP$$ echo "Press [ESC] or [CANCEL] to quit the program. " >> $TMP/txtTEMP$$ len=999 if [ $TURN -eq 0 ]; then if [ "$SW_PRESETSMS" = "yes" ]; then echo "$PRESETSMS" > $TMP/rspTEMP01 else > $TMP/rspTEMP01 fi fi while test "$len" -le 0 -o "$len" -gt 160 do dialog --backtitle "INSERT SMS ....." \ --inputbox "`cat $TMP/txtTEMP$$`" 10 70 "`cat $TMP/rspTEMP01`" \ 2> $TMP/rspTEMP01 if [ $? -ne 0 ] ; then sure_to_quit fi len=`cat $TMP/rspTEMP01 | wc -c ` if [ $len -le 0 -o $len -gt 160 ] ; then echo "Invalid SMS: It must be < 160 chars and > 0 long.." > $TMP/txtTEMP02 dialog --textbox "$TMP/txtTEMP02" 6 70 fi done NUMBERS="" okcycle=0 while [ "$NUMBERS" = "" -o "$okcycle" -eq 0 ] do dialog --backtitle "INSERT NUMBER(s).." \ --yesno "would you like to pick up number(s) \ from your phone memory" 8 60 if [ $? -eq 0 ] ; then # Yes, gimme num from phonebook. SMS_choicefrommem fi # Manual telephone number completion or insertion. echo "Please, insert/modify in the box below, the NUMBER(S)" > $TMP/txtTEMP$$ echo "where you want to send the message to. " >> $TMP/txtTEMP$$ echo "(Multiple numbers must be separated by a space.) " >> $TMP/txtTEMP$$ echo "Press [ESC] or [CANCEL] to quit the program. " >> $TMP/txtTEMP$$ echo " " >> $TMP/txtTEMP$$ echo "OUTGOING MESSAGE: " >> $TMP/txtTEMP$$ echo -n " " cat $TMP/rspTEMP01 | cut -c1-60 >> $TMP/txtTEMP$$ cat $TMP/rspTEMP01 | cut -c61-120 >> $TMP/txtTEMP$$ cat $TMP/rspTEMP01 | cut -c121-160 >> $TMP/txtTEMP$$ okcycle=1 dialog --backtitle "INSERT NUMBER(s).." \ --inputbox "`cat $TMP/txtTEMP$$`" \ 16 70 "$NUMBERS" 2> $TMP/rspTEMP03 if [ $? -ne 0 ] ; then sure_to_quit okcycle=0 else NUMBERS=`cat $TMP/rspTEMP03` if [ "$NUMBERS" = "" ] ; then dialog --backtitle "INSERT NUMBER(s).." \ --infobox "Number cannot be empty.\n Try again.." 4 28 sleep 2 okcycle=0 fi fi done # Last confirmation before sending messages.... okcycle=0 while [ $okcycle -eq 0 ] do echo "Ok. If you confirm the operation, the the SMS" > $TMP/txtTEMP$$ echo "is going to be sent to the selected number(s)." >> $TMP/txtTEMP$$ echo >> $TMP/txtTEMP$$ echo "Press [ESC] to quit the program. " >> $TMP/txtTEMP$$ echo "Press [CANCEL] to return to SMS input. " >> $TMP/txtTEMP$$ dialog --backtitle "$BACKTITLE" \ --yesno "`cat $TMP/txtTEMP$$`" 9 60 case $? in 0) okcycle=1;; 1) TURN=`expr $TURN + 1` continue 2;; 255) sure_to_quit ;; esac done TURN=`expr $TURN + 1` for num in $NUMBERS do # echo "Sending sms to number $num ... " dialog --backtitle "$BACKTITLE" --infobox "Sending sms to number $num ...\n Please wait" 4 45 if [ "$SW_SIMUL" = "yes" ] ; then sleep 2 else $GNOKII --sendsms $num < $TMP/rspTEMP01 > /dev/null 2>&1 fi if [ $? -eq 0 ] ; then dialog --backtitle "$BACKTITLE" \ --infobox "Message correctly sent to number $num !" 3 55 else dialog --backtitle "$BACKTITLE" \ --infobox "Sent Failed to num $num! Sorry!" 3 55 fi sleep 2 done done acex 0 # zap - fin qui