bash character substitution? Need help
Grant Cullen
grant.cullen-rieW9WUcm8FFJ04o6PK0Fg at public.gmane.org
Sat Feb 7 00:59:50 UTC 2004
I should have added more comments.
The ${X:1:17} is a sub-string 1 is the offset and 17 the length
The ${#X} gives the number of characters in variable X.
Do a man bash and search for OFFSET. There are other variable manipulators
described in that area.
Happy scripting.
Grant
-----Original Message-----
From: owner-tlug-lxSQFCZeNF4 at public.gmane.org [mailto:owner-tlug at ss.org]On Behalf Of Madison
Kelly
Sent: Friday, February 06, 2004 14:07
To: tlug-lxSQFCZeNF4 at public.gmane.org
Subject: Re: [TLUG]: bash character substitution? Need help
Hi Grant, and thank you for replying. May I ask another question?
How does this part work?
MAC=${X,1,17}
[ ${#X} -gt 18 ] &&
{
I hope it isn't an overly junior question but it looks quite different
from the code I have been building on. Thanks again!!
Madison
Grant Cullen wrote:
> Madison, the following will give the basic parsing.
>
> Good luck
>
> #!/bin/bash
> X='00:11:22:33:44:55>21,53,80-85'
> MAC=${X,1,17}
> [ ${#X} -gt 18 ] &&
> {
> # we have ports - length greater than 18
> IFS=','
> for PORT in ${x:18}
> do
> echo "iptable entry with port " $PORT
> done
> } ||
> {
> # no ports
> echo "iptable entry without ports"
> }
>
> Grant Cullen
> JADALL Consulting Ltd.
> grant.cullen-rieW9WUcm8FFJ04o6PK0Fg at public.gmane.org
> 416-706-4447
>
> -----Original Message-----
> From: owner-tlug-lxSQFCZeNF4 at public.gmane.org [mailto:owner-tlug at ss.org]On Behalf Of Madison
> Kelly
> Sent: Friday, February 06, 2004 12:40
> To: tlug-lxSQFCZeNF4 at public.gmane.org
> Subject: [TLUG]: bash character substitution? Need help
>
>
> Hi all,
>
> I am working on an iptables bash script but am handicapped by not
> being a programmer (or, just barely being one). Anyway, I've been able
> to figure out how to take a string and read out variables based on a
> character to split on but now what I need it to read a value into the
> same variable over and over again based on the split. Here is my
> specific issue:
>
> I have the variable:
>
> # Enter as (MAC address)>Port(-range),Port(-range),..,Port(-range)
> TRUSTED_IB_TCP=00:11:22:33:44:55>21,53,80-85
>
> Now I want to check and see if ports are defined. If not, allow all
> ports from the given MAC address. If so, read out the ports one after
> another in a 'for/while' style loop splitting on the ','. Then inside
> each of those, split on '-' and check to see if there is a value after
> the '-'.
>
> The problem is, I know how to split on the ',' (IFS=',' ...) but this
> doesn't seem like it is going to help me because I want to run a
> 'for/while' loop for each value, not assign new variables based on the
> split (like I have done so far). Is there some way to substitute the ','
> with ' ' and then do a 'for/while' loop?
>
> I am Googling now but I am having trouble finding the answer. I am
> hoping someone here might be able to point me in the right direction.
> Thanks!
>
> Madison
>
> PS - If it will help, I'll post what I have of the relevant parts of the
> script.
--
The Toronto Linux Users Group. Meetings: http://tlug.ss.org
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml
--
The Toronto Linux Users Group. Meetings: http://tlug.ss.org
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml
More information about the Legacy
mailing list