Do While Script


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Do While Script
# 1  
Old 03-14-2013
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 03:39 PM.. Reason: code tags
# 2  
Old 03-14-2013
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.
# 3  
Old 03-14-2013
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
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
# 5  
Old 03-15-2013
untested:
Code:
while read CLIENT
    do while read IMAGE
        do ... your process ...
        done < /tmp/dates.lst
    done < /tmp/clients.lst

# 6  
Old 03-15-2013
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.
# 7  
Old 03-15-2013
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

 
Login or Register to Ask a Question

Previous Thread | Next Thread

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to block first bash script until second bash script script launches web server/site?

I'm new to utilities like socat and netcat and I'm not clear if they will do what I need. I have a "compileDeployStartWebServer.sh" script and a "StartBrowser.sh" script that are started by emacs/elisp at the same time in two different processes. I'm using Cygwin bash on Windows 10. My... (3 Replies)
Discussion started by: siegfried
3 Replies

2. Shell Programming and Scripting

Shell script works fine as a standalone script but not as part of a bigger script

Hello all, I am facing a weird issue while executing a code below - #!/bin/bash cd /wload/baot/home/baotasa0/sandboxes_finance/ext_ukba_bde/pset sh UKBA_publish.sh UKBA 28082015 3 if then echo "Param file conversion for all the areas are completed, please check in your home directory"... (2 Replies)
Discussion started by: ektubbe
2 Replies

3. UNIX for Dummies Questions & Answers

Calling a script from master script to get value from called script

I am trying to call a script(callingscript.sh) from a master script(masterscript.sh) to get string type value from calling script to master script. I have used scripts mentioned below. #masterscript.sh ./callingscript.sh echo $fileExist #callingscript.sh echo "The script is called"... (2 Replies)
Discussion started by: Raj Roy
2 Replies

4. Shell Programming and Scripting

Script will keep checking running status of another script and also restart called script at night

I am using blow script :-- #!/bin/bash FIND=$(ps -elf | grep "snmp_trap.sh" | grep -v grep) #check snmp_trap.sh is running or not if then # echo "process found" exit 0; else echo "process not found" exec /home/Ketan_r /snmp_trap.sh 2>&1 & disown -h ... (1 Reply)
Discussion started by: ketanraut
1 Replies

5. Shell Programming and Scripting

create a shell script that calls another script and and an awk script

Hi guys I have a shell script that executes sql statemets and sends the output to a file.the script takes in parameters executes sql and sends the result to an output file. #!/bin/sh echo " $2 $3 $4 $5 $6 $7 isql -w400 -U$2 -S$5 -P$3 << xxx use $4 go print"**Changes to the table... (0 Replies)
Discussion started by: magikminox
0 Replies
Login or Register to Ask a Question