From owner-freebsd-questions@FreeBSD.ORG Thu Jun 21 20:19:41 2012 Return-Path: Delivered-To: questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D6FE2106564A for ; Thu, 21 Jun 2012 20:19:41 +0000 (UTC) (envelope-from Devin.Teske@fisglobal.com) Received: from mx1.fisglobal.com (mx1.fisglobal.com [199.200.24.190]) by mx1.freebsd.org (Postfix) with ESMTP id 96BAD8FC08 for ; Thu, 21 Jun 2012 20:19:41 +0000 (UTC) Received: from smtp.fisglobal.com ([10.132.206.17]) by ltcfislmsgpa06.fnfis.com (8.14.4/8.14.4) with ESMTP id q5LKHcXS016162 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Thu, 21 Jun 2012 15:19:40 -0500 Received: from dtwin (10.14.152.55) by smtp.fisglobal.com (10.132.206.17) with Microsoft SMTP Server (TLS) id 14.2.283.3; Thu, 21 Jun 2012 15:19:31 -0500 From: Sender: Devin Teske To: "'Odhiambo Washington'" References: <1521E29F-C0BC-46A8-A428-FC7183C6E 689@fisglobal.com> <136a01cd4fe7$f6053af0$e20fb0d0$@freebsd.org> In-Reply-To: <136a01cd4fe7$f6053af0$e20fb0d0$@freebsd.org> Date: Thu, 21 Jun 2012 13:19:41 -0700 Message-ID: <19ee01cd4feb$31896850$949c38f0$@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-Index: AQHHVXHlzLs30//OBCHn7Su2XUxMQAL1LUurAbd/azQCHWvg0QKfyJt0AXM6a2sCAalxtAHyetOdAcqPFJQCMQ/tOwMUUdcZAUJo4RwCNT6zuAKGbk9LAloDSlMC1KuKF5YIuDDA Content-Language: en-us X-Originating-IP: [10.14.152.55] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.7.7855, 1.0.260, 0.0.0000 definitions=2012-06-21_05:2012-06-21, 2012-06-21, 1970-01-01 signatures=0 Cc: 'questions' Subject: RE: A bash scripting question X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jun 2012 20:19:41 -0000 > -----Original Message----- > From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd- > questions@freebsd.org] On Behalf Of dteske@freebsd.org > Sent: Thursday, June 21, 2012 12:57 PM > To: 'Odhiambo Washington' > Cc: 'questions' > Subject: RE: A bash scripting question > > > > > -----Original Message----- > > From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd- > > questions@freebsd.org] On Behalf Of Devin Teske > > Sent: Thursday, June 21, 2012 9:24 AM > > To: Odhiambo Washington > > Cc: questions > > Subject: Re: A bash scripting question > > > > > > On Jun 21, 2012, at 6:40 AM, Odhiambo Washington wrote: > > > > > How Can I simplify/perfect the following script, so that I read _ALL_ the > > > lines in the file and act on the content as shown below, so that I do not > > > have to specifiy an action per line? > > > > > > This below is doing exactly what i need BUT reading one line at a time > > > untill the 10th line, if i want more i add manually... > > > This might help some1 someday! But if there is a way to perfect it please > > > do so..... > > > > > > #!/usr/local/bin/bash > > > > > > smsfile=email_to_sms > > > `grep Subject /var/spool/mail/sms >>$smsfile` > > > if [[ -s $smsfile ]] ; then > > > cat /dev/null > /var/spool/mail/sms > > > sed -i 's/Subject: //g' $smsfile > > > echo `sed -n '1p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==1 > > > {print $1}' $smsfile` > > > echo `sed -n '2p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==2 > > > {print $1}' $smsfile` > > > echo `sed -n '3p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==3 > > > {print $1}' $smsfile` > > > echo `sed -n '4p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==4 > > > {print $1}' $smsfile` > > > echo `sed -n '5p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==5 > > > {print $1}' $smsfile` > > > echo `sed -n '6p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==6 > > > {print $1}' $smsfile` > > > echo `sed -n '7p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==7 > > > {print $1}' $smsfile` > > > echo `sed -n '8p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==8 > > > {print $1}' $smsfile` > > > echo `sed -n '9p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==9 > > > {print $1}' $smsfile` > > > echo `sed -n '10p' $smsfile` | /usr/bin/gammu --sendsms TEXT `awk 'NR==10 > > > {print $1}' $smsfile` > > > else > > > echo "***********Sorry the SMS FILE "$smsfile" is empty.************" > > > fi > > > gammu-smsd start > > > cat email_to_sms >> email_to_sms2 > > > cat /dev/null > email_to_sms > > > > > > > Try the following. > > > > #!/bin/sh > > smsfile=email_to_sms > > spoolfile=/var/spol/mail/sms > > grep Subject "$spoolfile" >> "$smsfile" > > if [ -s "$smsfile" ]; then > > : > "$spoolfile" > > sed -e 's/Subject: //g' "$smsfile" | awk ' > > { > > if (NR > 10) exit > > print | "/usr/bin/gammu --sendsms TEXT " $1 > > }' > > else > > echo "***********Sorry the SMS FILE "$smsfile" is > > empty.************" > > fi > > gammu-smsd start > > cat "$smsfile" >> email_to_sms2 > > : > "$smsfile" > > > > I can beat my original response (above), while retaining original > functionality... > > #!/bin/sh > spoolfile=/var/spool/mail/sms > awk -v pat="^Subject: " ' > $0 ~ pat { > sub(pat,"") > print | "/usr/bin/gammu --sendsms TEXT " $1 > }' "$spoolfile" > Actually, some functionality was lost in the above translation, let me add the missing functionality back-in... #!/bin/sh spoolfile=/var/spool/mail/sms awk -v pat="^Subject: " ' BEGIN { found = 0 } $0 ~ pat { found++ sub(pat, "") print | "/usr/bin/gammu --sendsms TEXT " $1 } END { if ( ! found ) printf "%sSorry the SMS FILE \"%s\" is empty.%s\n", "***********", FILENAME, "***********" exit ! found }' "$spoolfile" && : > "$spoolfile" > Or, as a shell "One-Liner" (compatible with any shell and any awk)... The above doesn't translate so-well into a one-liner (unless you can stomach really long lines >80 chars), but here it is... awk -v pat="^Subject: " 'BEGIN{found=0}$0~pat{found++;sub(pat, "");print|"/usr/bin/gammu --sendsms TEXT "$1}END{if(!found)printf "%sSorry the SMS FILE \"%s\" is empty.%s\n","***********",FILENAME,"***********";exit !found}' /var/spool/mail/sms && :> /var/spool/mail/sms -- Devin P.S. I think the above is the best you can do. _____________ The information contained in this message is proprietary and/or confidential. If you are not the intended recipient, please: (i) delete the message and all copies; (ii) do not disclose, distribute or use the message in any manner; and (iii) notify the sender immediately. In addition, please be aware that any message addressed to our domain is subject to archiving and review by persons other than the intended recipient. Thank you.