liam_2e
asked on
Korn Shell Script Problem!
I have a problem I have to write a Korn Shell script that takes its input from a flat file and then runs as a batch job every 5am. My questions are how do I get the script to take input from a flat file I have never written a script that way? And second How do I schedual a job with cron to run every 5am?
Thanks!
Thanks!
You can read from a flat file as follows:
#!/usr/bin/ksh
FILE=/home/myfilename
#
# If the address file does not exist there is no point in going on!
if [[ ! -f $FILE ]]
then
exit 1
fi
#
# Open the file using descriptor 3
exec 3< $FILE
#
# Iterate through each line in the file
while read -u3 LINE
do
do what you want with the contents of $LINE
done
#
# Close the descriptor & file
exec 3<&-
#
# Exit with good result
exit 0
Running each day at 0500 is as per the previous post in this thread.
Cheers - Gavin
#!/usr/bin/ksh
FILE=/home/myfilename
#
# If the address file does not exist there is no point in going on!
if [[ ! -f $FILE ]]
then
exit 1
fi
#
# Open the file using descriptor 3
exec 3< $FILE
#
# Iterate through each line in the file
while read -u3 LINE
do
do what you want with the contents of $LINE
done
#
# Close the descriptor & file
exec 3<&-
#
# Exit with good result
exit 0
Running each day at 0500 is as per the previous post in this thread.
Cheers - Gavin
If you can post the input (format of the file) and what are all the parameters you are taking from the file and also what do you need to get the output. Then I can probably post the script per your requirement.
Kidambi
Kidambi
ASKER
One problem I am going to have is I am passing the input from the text file to a Vignette command and this command will require a variable to have space between ex
transferproject -b computer1:port2134:/pr/34r -o export -t "/ci/34r /ci/324r /ci/34r" -p exportname -l username:password
The problem I am showing is that the stuff in quotes must be read as one variable so I can drop it into the command but there has to be space between the template ids (the ci stuff) for the transferproject command to work. I don't know how to do this if the input variables start and end with a space???
transferproject -b computer1:port2134:/pr/34r
The problem I am showing is that the stuff in quotes must be read as one variable so I can drop it into the command but there has to be space between the template ids (the ci stuff) for the transferproject command to work. I don't know how to do this if the input variables start and end with a space???
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
All you need to do is change the delimiter in the text file where you are calling your vairables.
Here is a sample file that contains your variables.
filename is /yourhome/variables.txt (this file is delimited with ":")
computer1:port2134:/pr/34r " "export:/ci/34r /ci/324r /ci/34r:exportname:usernam e:password
#/bin/ksh
VAR1=`cat variables.txt | awk -F":" '{print $1}'`
similarly you can declare other variables also and then run the follwoing command
transferproject -b ${VAR1}:${VAR2}:${VAR#} -o ${VAR4} -t "${VAR5}" -p ${VAR6} -l ${VAR7}:${VAR8}
Try this out and post your comments here.
Kidambi
Here is a sample file that contains your variables.
filename is /yourhome/variables.txt (this file is delimited with ":")
computer1:port2134:/pr/34r
#/bin/ksh
VAR1=`cat variables.txt | awk -F":" '{print $1}'`
similarly you can declare other variables also and then run the follwoing command
transferproject -b ${VAR1}:${VAR2}:${VAR#} -o ${VAR4} -t "${VAR5}" -p ${VAR6} -l ${VAR7}:${VAR8}
Try this out and post your comments here.
Kidambi
ASKER
Ok here is what the script looks like now, and it works basically it prompts the user for the info that it needs. What I want is to have the info that the user is usually prompted for to be in a text file delimited by ":" although I dont know how to tell the script to read the file and create those variables! I need to have the variable data delimited by ":" because some variables may have some space in them that must be recognize. Well here is my script it is used to transfer vignette projects and templates.
Thanks!!!!!!!!!!!!!!!!!!!
echo "Vignette Project/Template/Data Transfer Script"
sleep 1;
echo " "
echo "Are you going to transfer more than one Template/Record?"
echo "Answer n if you are tranfering a Project y/n: \c"
read transfernum
echo "What is the name of the Source Server that you want to transfer Vignette"
echo "files from?: \c"
read exportmach
echo "What is the name of the Target Server that you want to transfer"
echo "files into?: \c"
read importmach
echo "What is the username to login to the Source Vignette Server?: \c"
read usernm
echo "What is the password to login to the Source Vignette Server?: \c"
read passwrd
echo "What is the Management ID of the Project, or Parent directory"
echo "of the files you would like to transfer?: \c"
read prjnm
echo "What is the Management ID of the Parent directory where the export"
echo "should be imported into?: \c"
read pardir
echo "What would you like to name your exported file?: \c"
read bkpnm
#The logic for a template vs project transfer the top command is template
if [ $transfernum = "y" ]
then
echo "List the files that you would like transfer. Be sure to"
echo "give the management ID ex /ci/r34 /ci/ty5 and so on.: \c"
read filetrans
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b $exportmach:18100:$prjnm -o export -t "$filetrans" -p
/var/opt/vignette/$bkpnm -l $usernm:$passwrd;
else
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b $exportmach:18100:$prjnm -o export -p
/var/opt/vignette/$bkpnm -l $usernm:$passwrd;
fi
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#This is the backup of the Target Server
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b $importmach:18100:$pardir -o export -p /var/opt/vignette/$tbkpnm -l
username:password;
#This is the import of the Targer Server this needs to change to utilize the "z" flag
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b $importmach:18100:$pardir -o import -p /var/opt/vignette/$bkpnm -l
username:password;
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
Thanks!!!!!!!!!!!!!!!!!!!
echo "Vignette Project/Template/Data Transfer Script"
sleep 1;
echo " "
echo "Are you going to transfer more than one Template/Record?"
echo "Answer n if you are tranfering a Project y/n: \c"
read transfernum
echo "What is the name of the Source Server that you want to transfer Vignette"
echo "files from?: \c"
read exportmach
echo "What is the name of the Target Server that you want to transfer"
echo "files into?: \c"
read importmach
echo "What is the username to login to the Source Vignette Server?: \c"
read usernm
echo "What is the password to login to the Source Vignette Server?: \c"
read passwrd
echo "What is the Management ID of the Project, or Parent directory"
echo "of the files you would like to transfer?: \c"
read prjnm
echo "What is the Management ID of the Parent directory where the export"
echo "should be imported into?: \c"
read pardir
echo "What would you like to name your exported file?: \c"
read bkpnm
#The logic for a template vs project transfer the top command is template
if [ $transfernum = "y" ]
then
echo "List the files that you would like transfer. Be sure to"
echo "give the management ID ex /ci/r34 /ci/ty5 and so on.: \c"
read filetrans
/opt/vignette/vignette/5.5
/var/opt/vignette/$bkpnm -l $usernm:$passwrd;
else
/opt/vignette/vignette/5.5
/var/opt/vignette/$bkpnm -l $usernm:$passwrd;
fi
##########################
#This is the backup of the Target Server
/opt/vignette/vignette/5.5
username:password;
#This is the import of the Targer Server this needs to change to utilize the "z" flag
/opt/vignette/vignette/5.5
username:password;
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
ASKER
Ok why does this not work?? I thought this would be the easiest way to write this script but it does not work?? And I dont know why! I can read the file the id #s are correct the script does run?
########################## ########## ########## ########## ###
# Vignette Project Transfer Script computer1 to computer2 #
# #
# NetWeb #
########################## ########## ########## ########## ###
#!/usr/bin/ksh
echo "Vignette Project/Template/Data Transfer Script"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
IFS=":"
while read projexpmgtid parprojinpmgtid exportnm
do
## do your stuff here
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#The project export
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b computer1:18100:$projexpmg tid -o export -p /var/opt/vignette/$exportn m -l $admin:password1;
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#This is the import
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b computer2:18100:$parprojin pmgtid -o import -p /var/opt/vignette/$exportn m -l admin:password2;
done < /export/home/vigna/Scripts /vgninput. txt
more /export/home/vigna/Scripts /vgninput. txt
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
vnginput.txt has this in it
/pr/3rd:/pr/76y:exporttest
##########################
# Vignette Project Transfer Script computer1 to computer2 #
# #
# NetWeb #
##########################
#!/usr/bin/ksh
echo "Vignette Project/Template/Data Transfer Script"
##########################
IFS=":"
while read projexpmgtid parprojinpmgtid exportnm
do
## do your stuff here
##########################
#The project export
/opt/vignette/vignette/5.5
##########################
#This is the import
/opt/vignette/vignette/5.5
done < /export/home/vigna/Scripts
more /export/home/vigna/Scripts
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
vnginput.txt has this in it
/pr/3rd:/pr/76y:exporttest
ASKER
Ok here is where I am now and it is still not working. But I think I am getting closer!
I think my problem is that my variables are not being initialized?? This is what my text file that
contains my varibles looks like.
vnginput.txt has this in it
/pr/3rd:/pr/76y:exporttest
########################## ########## ########## ########## ###
# Vignette Project Transfer Script computer1 to computer2 #
# #
# #
# #
########################## ########## ########## ########## ###
#!ksh
echo "Vignette Project/Template/Data Transfer Script"
sleep 1;
echo " "
########################## ########## ########## ########## ########## ########## ####
IFS=":"
while (read projexpmgtid; read parprojinpmgtid; read exportnm)
do
## do your stuff here
########################## ########## ########## ########## ########## ########## ####
#The project export
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b computer1:18100:$projex
pmgtid -o export -p /var/opt/vignette/$exportn m -l $admin:password1;
#allow thirty seconds for export to complete
sleep 30;
########################## ########## ########## ########## ########## ########## ####
#This is the import
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b computer2:18100:$parpro
jinpmgtid -o import -p /var/opt/vignette/$exportn m -l admin:password2;
done < /export/home/vigna/Scripts /vgninput. txt
more /export/home/vigna/Scripts /vgninput. txt
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
###############NOTE I PUT THIS PIECE IN TO SEE IF MY VARIABLES ARE BEING CREATED
###############AND I DON'T BELIEVE THAT THEY ARE NOTHING IS BEING PRINTED
print $projexpmgtid
print $parprojinpmgtid
print $exportnm
I think my problem is that my variables are not being initialized?? This is what my text file that
contains my varibles looks like.
vnginput.txt has this in it
/pr/3rd:/pr/76y:exporttest
##########################
# Vignette Project Transfer Script computer1 to computer2 #
# #
# #
# #
##########################
#!ksh
echo "Vignette Project/Template/Data Transfer Script"
sleep 1;
echo " "
##########################
IFS=":"
while (read projexpmgtid; read parprojinpmgtid; read exportnm)
do
## do your stuff here
##########################
#The project export
/opt/vignette/vignette/5.5
pmgtid -o export -p /var/opt/vignette/$exportn
#allow thirty seconds for export to complete
sleep 30;
##########################
#This is the import
/opt/vignette/vignette/5.5
jinpmgtid -o import -p /var/opt/vignette/$exportn
done < /export/home/vigna/Scripts
more /export/home/vigna/Scripts
echo "Vignette Transfer Complete, Use Vignette Tools to Varify Success"
###############NOTE I PUT THIS PIECE IN TO SEE IF MY VARIABLES ARE BEING CREATED
###############AND I DON'T BELIEVE THAT THEY ARE NOTHING IS BEING PRINTED
print $projexpmgtid
print $parprojinpmgtid
print $exportnm
ASKER
Ok Here is where I am at now. I have been putting in echo statements to see how far the script gets. It runs as far as "IFS all done" so there must be some problem with my while statement??
Thanks
Liam
########################## ########## ########## ########## ###
# Vignette Project Transfer Script devsx022 to devsx025 #
# Created by Liam Tuohey ltuohey@massmutual.com 6/29/01 #
# NetWeb #
########################## ########## ########## ########## ###
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
VPT_SRC="/export/home/vign a/Scripts/ vgninput.t xt"
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#The project export
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b devsx022:18100:$projexpmgt id -o export -p /var/opt/vignette/$exportn m -l admin:easadmin;
echo "export complete"
sleep 30;
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#This is the import
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b devsx025:18100:$parprojinp mgtid -o import -p /var/opt/vignette/$exportn m -l admin:xsw21qaz;
echo "import complete"
done
exit 0
Thanks
Liam
##########################
# Vignette Project Transfer Script devsx022 to devsx025 #
# Created by Liam Tuohey ltuohey@massmutual.com 6/29/01 #
# NetWeb #
##########################
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
##########################
VPT_SRC="/export/home/vign
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
##########################
#The project export
/opt/vignette/vignette/5.5
echo "export complete"
sleep 30;
##########################
#This is the import
/opt/vignette/vignette/5.5
echo "import complete"
done
exit 0
ASKER
Ok Here is where I am at now. I have been putting in echo statements to see how far the script gets. It runs as far as "IFS all done" so there must be some problem with my while statement??
Thanks
Liam
########################## ########## ########## ########## ###
# Vignette Project Transfer Script devsx022 to devsx025 #
# Created by Liam 6/29/01 #
# NetWeb #
########################## ########## ########## ########## ###
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
VPT_SRC="/export/home/vign a/Scripts/ vgninput.t xt"
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#The project export
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b devsx022:18100:$projexpmgt id -o export -p /var/opt/vignette/$exportn m -l admin:easadmin;
echo "export complete"
sleep 30;
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#This is the import
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b devsx025:18100:$parprojinp mgtid -o import -p /var/opt/vignette/$exportn m -l admin:xsw21qaz;
echo "import complete"
done
exit 0
Thanks
Liam
##########################
# Vignette Project Transfer Script devsx022 to devsx025 #
# Created by Liam 6/29/01 #
# NetWeb #
##########################
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
##########################
VPT_SRC="/export/home/vign
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
##########################
#The project export
/opt/vignette/vignette/5.5
echo "export complete"
sleep 30;
##########################
#This is the import
/opt/vignette/vignette/5.5
echo "import complete"
done
exit 0
ASKER
########################## ########## ########## ########## ###
# Vignette Project Transfer Script comp1 to comp2 #
# Created by Liam Tuohey 6/29/01 #
# NetWeb #
########################## ########## ########## ########## ###
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
VPT_SRC="/export/home/vign a/Scripts/ vgninput.t xt"
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#The project export
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b comp1:18100:$projexpmgtid -o export -p /var/opt/vignette/$exportn m -l admin:4436645;
echo "export complete"
sleep 30;
########################## ########## ########## ########## ########## ########## ########## ########## ########## ########## #########
#This is the import
/opt/vignette/vignette/5.5 /bin/solar is/transfe rproject -b comp2:18100:$parprojinpmgt id -o import -p /var/opt/vignette/$exportn m -l admin:543673d;
echo "import complete"
done
exit 0
# Vignette Project Transfer Script comp1 to comp2 #
# Created by Liam Tuohey 6/29/01 #
# NetWeb #
##########################
#!/bin/ksh
echo "Vignette Project/Template/Data Transfer Script Starting"
##########################
VPT_SRC="/export/home/vign
echo "VPT_SRC variable made"
IFS=":"
echo "IFS all done"
while read line
echo "variables created"
do
echo "do start"
projexpmgtid=$(echo $VPT_SRC | awk -F: '{print $1}') #the first field
parprojinpmgtid=$(echo $VPT_SRC | awk -F: '{print $2}') #the second one
exportnm=$(echo $VPT_SRC | awk -F: '{print $3}') #the third one
echo "variable values set"
##########################
#The project export
/opt/vignette/vignette/5.5
echo "export complete"
sleep 30;
##########################
#This is the import
/opt/vignette/vignette/5.5
echo "import complete"
done
exit 0
You schedule your script by adding it to the crontab of the appropriate user (probably root) with "crontab -e". To execute a script at 5am the crontab entry would look like:
0 5 * * * /path-to/your-script
See the man pages for crontab for more information.