Simple script

Hi All,

First time poster so be gentle - Also apologies if this is in the wrong section.

I am not a unix administrator but as a Storage administrator know enouh to get me by for what I need to do.

However I am having a slow night-shift so I am playing about with a bit of scripting to make getting information of an EMC array a little easier.

I have this command:

symcfg -sid 1474 -fa all list

which gives this output:

Symmetrix ID: 000284701474
           S Y M M E T R I X    F I B R E   D I R E C T O R S
    Dir    Port  WWN               VCM      Volume Set   Pnt to Pnt
                                   Enabled  Addressing
    FA-3A   0    500604843e0cc882  No       No           Yes
    FA-3A   1    500604843e0cc8a2  Yes      Yes          Yes
    FA-4A   0    500604843e0cc883  Yes      No           Yes
    FA-4A   1    500604843e0cc8a3  Yes      Yes          Yes
    FA-6A   0    500604843e0cc885  No       No           Yes
    FA-6A   1    500604843e0cc8a5  Yes      No           Yes
    FA-11A  0    500604843e0cc88a  Yes      No           Yes
    FA-11A  1    500604843e0cc8aa  Yes      Yes          Yes
    FA-13A  0    500604843e0cc88c  No       No           Yes
    FA-13A  1    500604843e0cc8ac  Yes      No           Yes
    FA-14A  0    500604843e0cc88d  Yes      No           Yes
    FA-14A  1    500604843e0cc8ad  Yes      No           Yes
    FA-3B   0    500604843e0cc892  Yes      No           Yes
    FA-3B   1    500604843e0cc8b2  Yes      No           Yes
    FA-4B   0    500604843e0cc893  No       No           Yes
    FA-4B   1    500604843e0cc8b3  Yes      No           Yes
    FA-6B   0    500604843e0cc895  Yes      No           Yes
    FA-6B   1    500604843e0cc8b5  Yes      Yes          Yes
    FA-11B  0    500604843e0cc89a  No       No           Yes
    FA-11B  1    500604843e0cc8ba  Yes      No           Yes
    FA-13B  0    500604843e0cc89c  Yes      No           Yes
    FA-13B  1    500604843e0cc8bc  Yes      Yes          Yes
    FA-14B  0    500604843e0cc89d  No       No           Yes
    FA-14B  1    500604843e0cc8bd  Yes      Yes          Yes

What I want to do is pass column 1 & 2 into another command for different output.
The twist is I in column 1 I need to get rid of the "FA-" bit.

I have tried something like:

symcfg -sid 1474 -fa all list | awk '{print $1, $2}' | grep -v 'FA-'
 

However this removes the whole FA- and the number and letter afterwards.

The plan is to eventually do something like:

for i in `symcfg -sid 1474 -fa all list | awk '{print $1}' | grep -v 'FA-'`
for n in `symcfg -sid 1474 -fa all list | awk '{print $2}'`
do
echo "symmaskdb -sid 1474 -dir $i -p $n  list database -nop"
symmaskdb -sid 1474 -dir $i -p $n  list database -nop >> 1474_list_database
done

I also sure I am going to get problems with the above command as well but first things first.

Any help you can give would be great.

Cheers
Colin

Hi, perhaps this

awk -F'[ \t-]*' '{print $2, $3}'

is the filter you are looking for..

---------- Post updated at 22:32 ---------- Previous update was at 22:27 ----------

I think it may be easier to just use shell, like so for instance:

symcfg -sid 1474 -fa all list | {
read;read;read;read                                   # cut out the first 4 lines of the output
while IFS='[ \t-]' read x director port x; do
  echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
done
}

Scrutinizer,
Thanks for the response dude however like I said I am no administrator so can guess at what these commands do but that is about it. unfortuantely neither are working for me.

This returns about the same amount of lines as I would expect from my output however all the lines are blank. What does the [\t-]* actually do? I have tried searching the man pages but cannot see this.

---------- Post updated at 22:32 ---------- Previous update was at 22:27 ----------

This returns an error message "read: missing argument" I assumed the read like your comments like you said were just to not read the first few lines (which is useful to know by the way).

Apologies for being a bit dense. Its at times like these I realise how little I know about UNIX and scripting.

Thanks for your help and suggestions though

Hi, what happens if you replace that line with:

read x;read x;read x;read x                           # cut out the first 4 lines of the output

What is you OS?

About awk:
-F'[ \t-]* changes the field separator to any space, tab or - character and makes awk consider repetions of the characters as a single separator

Okay okay - slightly further this time:

opsan00@dyeccs01 # symcfg -sid 1474 -fa all list | {
opsan00@dyeccs01 > read x;read x;read x;read x
opsan00@dyeccs01 > while IFS='[ \t-]' read x director port x; do
opsan00@dyeccs01 > echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
opsan00@dyeccs01 > done
opsan00@dyeccs01 > }
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
symmaskdb -sid 1474 -dir -p list database -nop
#
#

I think I the curcial bit of the script is the bit I least understand:

while IFS='[ \t-]' read x director port x

I assume that the director and port are parameters and hence why they are passed into the echo command - correct?
However how does it know what these parameters are without awk column 1 & 2?

I am probably getting this wrong but I think if I can get my head round this then I will be able to understand what the script is doing and may even be able to troubleshoot it better myself :slight_smile:

I also thought I understood your awk parameters and tried to change it slightly which made it output the whole command - I will need to see if there is a way I can figure out how to do this - the more I use awk the more l like it.

# symcfg -sid 1474 -fa all list | awk -F'[ \tFA-]*' '{print $1}'
Symmetrix ID: 000284701474
           S Y M M E T R I X    F I B R E   D I R E C T O R S
    Dir    Port  WWN               VCM      Volume Set   Pnt to Pnt
                                   Enabled  Addressing
    FA-3A   0    500604843e0cc882  No       No           Yes
    FA-3A   1    500604843e0cc8a2  Yes      Yes          Yes
    FA-4A   0    500604843e0cc883  Yes      No           Yes
    FA-4A   1    500604843e0cc8a3  Yes      Yes          Yes
    FA-6A   0    500604843e0cc885  No       No           Yes
    FA-6A   1    500604843e0cc8a5  Yes      No           Yes
    FA-11A  0    500604843e0cc88a  Yes      No           Yes
    FA-11A  1    500604843e0cc8aa  Yes      Yes          Yes
    FA-13A  0    500604843e0cc88c  No       No           Yes
    FA-13A  1    500604843e0cc8ac  Yes      No           Yes
    FA-14A  0    500604843e0cc88d  Yes      No           Yes
    FA-14A  1    500604843e0cc8ad  Yes      No           Yes
    FA-3B   0    500604843e0cc892  Yes      No           Yes
    FA-3B   1    500604843e0cc8b2  Yes      No           Yes
    FA-4B   0    500604843e0cc893  No       No           Yes
    FA-4B   1    500604843e0cc8b3  Yes      No           Yes
    FA-6B   0    500604843e0cc895  Yes      No           Yes
    FA-6B   1    500604843e0cc8b5  Yes      Yes          Yes
    FA-11B  0    500604843e0cc89a  No       No           Yes
    FA-11B  1    500604843e0cc8ba  Yes      No           Yes
    FA-13B  0    500604843e0cc89c  Yes      No           Yes
    FA-13B  1    500604843e0cc8bc  Yes      Yes          Yes
    FA-14B  0    500604843e0cc89d  No       No           Yes
    FA-14B  1    500604843e0cc8bd  Yes      Yes          Yes
#

Thanks again

Hi, could you try if it makes a difference if you replace that line with this?

while IFS="-$IFS" read x director port x; do

Otherwise, what is your OS?
Can you post the output of this command?

symcfg -sid 1474 -fa all list | awk 'NR==5' | od -c

Scrutinizer

First things first:

O/S is:

# uname -a
SunOS 5.8 Generic_117000-05 sun4u sparc SUNW,Sun-Fire-V240
#

This command worked better this time and is passing the right parameters into command which is great - however it is not quite working when I use it properly:

# symcfg -sid 1474 -fa all list | {
> read x;read x;read x;read x
> while IFS="-$IFS" read x director port x; do
> echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
> done
> }
symmaskdb -sid 1474 -dir  -p  list database -nop
symmaskdb -sid 1474 -dir Port -p WWN list database -nop
symmaskdb -sid 1474 -dir Addressing -p  list database -nop
symmaskdb -sid 1474 -dir  -p  list database -nop
symmaskdb -sid 1474 -dir 3A -p 0 list database -nop
symmaskdb -sid 1474 -dir 3A -p 1 list database -nop
symmaskdb -sid 1474 -dir 4A -p 0 list database -nop
symmaskdb -sid 1474 -dir 4A -p 1 list database -nop
symmaskdb -sid 1474 -dir 6A -p 0 list database -nop
symmaskdb -sid 1474 -dir 6A -p 1 list database -nop
symmaskdb -sid 1474 -dir 11A -p 0 list database -nop
symmaskdb -sid 1474 -dir 11A -p 1 list database -nop
symmaskdb -sid 1474 -dir 13A -p 0 list database -nop
symmaskdb -sid 1474 -dir 13A -p 1 list database -nop
symmaskdb -sid 1474 -dir 14A -p 0 list database -nop
symmaskdb -sid 1474 -dir 14A -p 1 list database -nop
symmaskdb -sid 1474 -dir 3B -p 0 list database -nop
symmaskdb -sid 1474 -dir 3B -p 1 list database -nop
symmaskdb -sid 1474 -dir 4B -p 0 list database -nop
symmaskdb -sid 1474 -dir 4B -p 1 list database -nop
symmaskdb -sid 1474 -dir 6B -p 0 list database -nop
symmaskdb -sid 1474 -dir 6B -p 1 list database -nop
symmaskdb -sid 1474 -dir 11B -p 0 list database -nop
symmaskdb -sid 1474 -dir 11B -p 1 list database -nop
symmaskdb -sid 1474 -dir 13B -p 0 list database -nop
symmaskdb -sid 1474 -dir 13B -p 1 list database -nop
symmaskdb -sid 1474 -dir 14B -p 0 list database -nop
symmaskdb -sid 1474 -dir 14B -p 1 list database -nop
symmaskdb -sid 1474 -dir  -p  list database -nop
#
# symcfg -sid 1474 -fa all list | {
> read x;read x;read x;read x
> while IFS="-$IFS" read x director port x; do
> echo "symmaskdb -sid 1474 -dir $director -p $port list database"
> symmaskdb -sid 1474 -dir $director -p $port list database | awk '{print $3}' >>1474_FA_DB_output
> done
> }
symmaskdb -sid 1474 -dir  -p  list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir Port -p WWN list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir Addressing -p  list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir  -p  list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14A -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14A -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 3B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 4B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 6B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 11B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 13B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14B -p 0 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir 14B -p 1 list database
'sid': Invalid action.
symmaskdb -sid 1474 -dir  -p  list database
'sid': Invalid action.
#

However if I issue command on its own it works:

# symmaskdb -sid 1474 -dir 4A -p 1 list database
Symmetrix ID            : 000284701474
Database Type           : Type2
Last updated at         : 04:14:48 AM on Thu Jun 10,2010
Director Identification : FA-4A
Director Port           : 1
                               User-generated
Identifier        Type   Node Name        Port Name         Devices
----------------  -----  ---------------------------------  ---------
50060b00000abb5e  Fibre  50060b00000abb5e 50060b00000abb5e  0386:0387
                                                            05A0:0621
50060b00000abf38  Fibre  50060b00000abf38 50060b00000abf38  0388:0389
                                                            05A0:0621
50060b00002589e2  Fibre  50060b00002589e2 50060b00002589e2  0380
                                                            06AA:06DA
50060b00001d8c36  Fibre  50060b00001d8c36 50060b00001d8c36  0381
                                                            06AA:06DA
50060b00002589ec  Fibre  50060b00002589ec 50060b00002589ec  039F
                                                            06AA:06DA
50060b00000ac882  Fibre  50060b00000ac882 50060b00000ac882  038A:038B
                                                            05A0:0621

I cannot tell you how much this is going to help me with many different commands. can you break down the command for me so I can understand how this works - once I understand I can then use for many other different queries and troubleshooting.

As for the other command it did not really return anything - but here is the output:

# symcfg -sid 1474 -fa all list | awk 'NR==5' | od -c
0000000  \n
0000001
#

Again thanks for your help.

Hi Colin,

You are on Solaris 8. You cannot use awk, since it does not work properly. You have to use nawk of /usr/xpg4/bin/awk.

So, could you produce:

symcfg -sid 1474 -fa all list | nawk 'NR==5' | od -c

As for the script. Can you put this in a script file, eg symmask.sh

#!/usr/xpg4/bin/sh
symcfg -sid 1474 -fa all list | {
read;read;read;read                                   # cut out the first 4 lines of the output
while IFS="-$IFS" read x director port x; do
  echo "symmaskdb -sid 1474 -dir $director -p $port list database -nop"
  symmaskdb -sid 1474 -dir $director -p $port list database -nop
done
}

Then run

chmod +x symmask.sh

to make it executable
en then tun the script:

./symmask.sh

The script works as follows:
Take the output from the command and run it through a pipe it so it becomes input to the code block in the curly braces. Inside the code block, perform 4 reads so that we end up at line 5. Then start a while loop until read can no longer read a line (EOF is reached). Just for the read command, set the IFS to the previous IFS plus the character "-" (this determines how a line is split into fields). Read the first field into dummy variable x (the part before the "-") the second into "director", the third into variable "port" and the rest of the fields into dummy variable x.
Then inside the loop use variables port and director as parameters to the command...

Hope this clarifies things a bit..

S.