Do While Script | Unix Linux Forums | UNIX for Dummies Questions & Answers

  Go Back    


UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !!

Do While Script

UNIX for Dummies Questions & Answers


Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 03-14-2013
JGM22 JGM22 is offline
Registered User
 
Join Date: Mar 2013
Last Activity: 19 March 2013, 7:48 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Do While Script

All,

I am a newbie to scripting and would appreciate any assistance on the following. I am a NetBackup administrator and just completed a disaster recovery exercise. Thankfully this was only six clients to recover. While working on the exercise I decided to try and script everything and found a way to get what I needed but some parts I am certain could be scripted more efficiently.

What I am doing in this example is to obtain all of the available backups between the date range specified from each client one at a time. Is there a way to pass along two ( or more ) variables to a single line for all of the clients instead of running the command for each client individually?

I want to take this and shrink it down to a single line that somehow reads a file of the clients that I created call /tmp/clients.lst and it would loop thru the file to find the client name and the dates for each one and continue until it loops through for each clients and its dates.


Code:
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp



Here is how I got it to work running each client by itself...


Code:
	=>	vi /tmp/alldates


Code:
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 123 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 456 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp
sudo /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client 789 -d 02/10/2013 -e 03/04/2013 | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp


Code:
	=>	chmod 777 /tmp/alldates

	=>	/tmp/alldates

	=>	cat /tmp/dates.tmp | sort -u > /tmp/dates.lst

	=>	cat  /tmp/dates.lst

02/10/2013
02/11/2013
02/12/2013
02/13/2013


Thank you...

Last edited by Scrutinizer; 03-14-2013 at 02:39 PM.. Reason: code tags
Sponsored Links
    #2  
Old 03-14-2013
DGPickett DGPickett is offline Forum Advisor  
Registered User
 
Join Date: Oct 2010
Last Activity: 20 August 2014, 3:47 PM EDT
Location: Southern NJ, USA (Nord)
Posts: 4,398
Thanks: 8
Thanked 536 Times in 515 Posts
It seems like you want the dates and some users from the file. Process the whole file to make a list of users and dates, sorted. Take your list of user to restore and sort it. Use join on the two files to produce a list of matches.
Sponsored Links
    #3  
Old 03-14-2013
RudiC RudiC is offline Forum Advisor  
Registered User
 
Join Date: Jul 2012
Last Activity: 22 August 2014, 12:02 PM EDT
Location: Aachen, Germany
Posts: 4,093
Thanks: 67
Thanked 971 Times in 921 Posts
I'm not sure I understand half of your request. I see the client change from line to line, but I don't see any date change. (Besides, you can join the awk and sed commands into one single command)
Why don't you use for client in 123 456 789 etc to loop through the clients?
    #4  
Old 03-15-2013
JGM22 JGM22 is offline
Registered User
 
Join Date: Mar 2013
Last Activity: 19 March 2013, 7:48 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Let me start over...

This script will perform the following:

for IMAGE in `cat /tmp/dates.lst`
do
sudo bpimagelist -L -client server1 -d $IMAGE -e $IMAGE -policy INT-UNIX-Servers | egrep -i 'Backup ID:'| awk '!x[$0]++'
done | awk '{print$3}' >> /tmp/intershopimages

1) Uses /tmp/dates ( file with a single column of dates ) using IMAGE as the variable for the date range

2) Uses a set of specific client ( server1 )

3) To find all available backups ( that can be used to restore from )

4) Passes the output to /tmp/intershopimages

5) Problem is I have 65+ clients to run this command for ( I just change Server1 to Server2, etc... and run it 65 times yuck! )

6) Is there a way I can add a second variable ( IMAGE2 ) and assign that to another file that contains the clients ( /tmp/clients )?

I am looking for it to

Loop1:
Finds first client
Finds first date
Finds all available backups for the first client only

Loop2:
Finds first client
Finds second date
Finds all available backups for the first client only

It would eventually loop through for the first client for every date then goto the next client found in the list

Loop3:
Finds second client
Finds first date
Finds all available backups for the second client only

Loop4:
Finds second client
Finds second date
Finds all available backups for the second client only

etc... until every clients backups were found.

Thank you
Sponsored Links
    #5  
Old 03-15-2013
RudiC RudiC is offline Forum Advisor  
Registered User
 
Join Date: Jul 2012
Last Activity: 22 August 2014, 12:02 PM EDT
Location: Aachen, Germany
Posts: 4,093
Thanks: 67
Thanked 971 Times in 921 Posts
untested:
Code:
while read CLIENT
    do while read IMAGE
        do ... your process ...
        done < /tmp/dates.lst
    done < /tmp/clients.lst

Sponsored Links
    #6  
Old 03-15-2013
DGPickett DGPickett is offline Forum Advisor  
Registered User
 
Join Date: Oct 2010
Last Activity: 20 August 2014, 3:47 PM EDT
Location: Southern NJ, USA (Nord)
Posts: 4,398
Thanks: 8
Thanked 536 Times in 515 Posts
I suppose GNU parallel might be nice for this, if it runs long. Or, you could spin off each client in the background. If there are many clients, parallel can control the number at once.
Sponsored Links
    #7  
Old 03-15-2013
tange tange is offline
Registered User
 
Join Date: Jul 2010
Last Activity: 27 April 2014, 3:13 PM EDT
Posts: 16
Thanks: 0
Thanked 7 Times in 7 Posts

Code:
sudo parallel /usr/openv/netbackup/bin/admincmd/bpimagelist -U -client {1} -d {2} -e 03/04/2013 :::: clients.file dates.file  | awk '{print $1}' | sed '1,2d' >> /tmp/dates.tmp

Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
create a shell script that calls another script and and an awk script magikminox Shell Programming and Scripting 0 06-26-2008 02:50 AM



All times are GMT -4. The time now is 07:34 PM.