Korn Shell Script

Hi,

Below is my original script I wrote, which I need to modify to do the following :

1) read values from a tab delimited flat file,
2) assign the values from the flat file to specific variables,
3) and then loop through the flat file and repeat the assignment of values to the variables until the end of the flat file.

Here is my script that needs modifying:

My Script
-----------

#!/bin/ksh
###################### modify_upload_cr_node.ksh #################################
#
# In TI's testlab environment they do not have access to their production network.
# To work around this issue, a CR internal utility – show tech upload – can be
# used. Please follow the instructions below on how to extract the config file
# from the router, then use the “show tech upload” mechanism to upload without
# access to live router.
#
# CR_DataMiner Usage:
# CR_DataMiner ipAddress snmpPort snmpCommunity fileName connectionProtocol
# username password enablePassword
#
# Where:
# ipAddress             = IP address of the router or switch
# snmpPort              = SNMP agent port number
# snmpCommunity         = SNMP community string
# fileName              = output file name - if it exists, it will be
# overwritten without a warning
# connectionProtocol    = connection protocol (SSH/telnet) - for any value
# other than SSH, telnet is used
# username              = user account
# password              = password
# enablePassword        = password to enter privileged mode
#
# CR upload procedure (from CR_DataMiner :output):
# 1. CR_DataMiner must be executed from within the NPA environment
# 2. Run CR_DataMiner for the desired node.
# 3. Set the output filename so that the string 'showtech' is part of
#    the filename. e.g. 'file1.showtech.txt'
# 4. Copy the output file to the NPA servers /tmp directory
# 5. Within Netprovision Activator, create a new node:
#    - Set 'Managed' to FALSE
#    - Set 'Fabric File' and 'Service File' to the name of the file
#      copied to the /tmp directory, do not include the path
# 6. 'Upload' the created node.
#
# This script performs steps 5 and 6 above. Firstly it
# modifies the Cisco Router Node parameters in CRndNode.oaf file
# to the following :
#
# srmanaged set to FALSE
# crfabfile set to showtec.conf flat file
# crservfile set to showtec.conf flat file
#
# Then it performs an upload of a specific Cisco Router Node, which
# has already been created in the database.
#
#################################################################################

if [[ $# -ne 2 ]]; then
      print "Usage: modify_upload_cr_node.ksh <node name> <fabric and service flat file>\n"
      print "Example: modify_upload_cr_node.ksh R-TS31 r-ts31.conf.showtech.conf"
      exit 1
fi

typeset Command_Name=$0
typeset Node_Name=$1
typeset Show_Tech=$2

function checkRunEnv
{
      if [[ -z "$CCP_REL" ]];
      then
        print "\nERROR: Not in run enviroment. Exiting....\n"
        exit
      fi
}
checkRunEnv

# Initialize the script manager
export NPSNEWSESSION=1
export NPSLOG=${0}.log
export NPSMODE=Trace
# typeset STDOUT=${0}.stdout
# typeset STDERR=${0}.stderr

. $CCP_BIN/npsinit
trap "nps error" ERR

SESSION=${NPSSESSIONID#SYssnSession:}
TRID=$(AVcr start $SESSION)

# From command line insert node name, fabric and service text files

set -A CRIT srname=${Node_Name}
set -A NEW_ATTS crfabfile=${Show_Tech} crservfile=${Show_Tech} srmanaged="FALSE"
nps trace "These are attributes of transaction $TRNUM"
nps selectone CRndNode -criteria CRIT NODE_ID

if nps modify $NODE_ID NEW_ATTS; then
      echo "\nNode name =${Node_Name} with node ID =$NODE_ID modified"
      if AVcr apply $TRID $SESSION; then
         echo "Transaction $TRID applied"
      fi
else
      "nps modify failed with error code $?"
      if AVcr abandon $TRID $SESSION; then
         echo "Transaction $TRID abandoned "
      fi
fi

# Perform an upload after modify

set -A UPLD_ATTS UploadType=Node_Fabric_Serv
nps upload $NODE_ID UPLD_ATTS UROID
echo "Node name=${Node_Name} with node ID=$NODE_ID with $UPLD_ATTS uploaded"

export NPSMODE=Notrace

# AVcr apply $TRID $SESSION

nps stop

End of script
---------------

As can be seen from the script the user has to enter 2 arguements on the command line. However, I have created a tab delimited flat file called nodename_showtech.lookup that contains the 2 arguements required for the script (see below for example of flat file). I now want my script to read the flat file and assign the values to Node_Name and Show_Tech variables. Then I want the script to repeat this assignment until the end of the flat file.

My tab delimited flat file
----------------------------
Node_Name        Show_Tech
R-AL23      r-al23.conf.showtech.conf
R-AN24      r-an24.conf.showtech.conf
R-BA19      r-ba19.conf.showtech.conf
R-BA3D      r-ba3d.conf.showtech.conf
R-BA52      r-ba52.conf.showtech.conf
R-BA66      r-ba66.conf.showtech.conf
R-BG42      r-bg42.conf.showtech.conf
R-BO102      r-bo102.conf.showtech.conf
R-BO103      r-bo103.conf.showtech.conf
R-BO106      r-bo106.conf.showtech.conf
R-BO10D      r-bo10d.conf.showtech.conf
R-BO11D      r-bo11d.conf.showtech.conf
R-BO16D      r-bo16d.conf.showtech.conf
R-BO17D      r-bo17d.conf.showtech.conf
R-BO18D      r-bo18d.conf.showtech.conf
R-BO44      r-bo44.conf.showtech.conf
R-BO45      r-bo45.conf.showtech.conf
R-BO94      r-bo94.conf.showtech.conf
R-BO9D      r-bo9d.conf.showtech.conf
R-BS1D      r-bs1d.conf.showtech.conf
R-BS2D      r-bs2d.conf.showtech.conf
R-BS38      r-bs38.conf.showtech.conf
R-BS54      r-bs54.conf.showtech.conf
R-BS60      r-bs60.conf.showtech.conf

I'm new to Korn shell scripting and I do not how to do what I want. Any help would be appreciated.

Best regards,
Andy Steven.
andy_stevenAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

chris_calabreseCommented:
The easiest is to keep the current script in tact and writ a wrapper

#!/bin/ksh -
IFS="      "
while read Node_Name Show_Tech
do  /the/original/script "$Node_Name" "$Show_Tech"
done < /the/input/file


Or hack this logic into the original script.
Also consider taking the name of the input file on the command line.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
yuzhCommented:
Assume that your file has 2 cols, Node_Name        Show_Tech (no headings)
and you want to put them into array vars.

Here's an sample script:

#!/bin/ksh
typeset -i cnt=0

while read read Node_Name Show_Tech
do
    node[$cnt]=$Node_Name
    tech[$cnt]=$Show_Tech
    ((cnt = cnt + 1))
 done
 exit

You can read the file and assign the value to ENV var use the same syntax.

0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Unix OS

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.