Visit Our UNIX and Linux User Community


How To Run A For Loop In A Remsh?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How To Run A For Loop In A Remsh?
# 1  
Old 03-18-2011
How To Run A For Loop In A Remsh?

Hi all,

I'm trying to remsh to another server and then execute a for loop command there but I'm getting unexpected errors and would appreciate any suggestions.

Ideally what I want to do is this:
Code:
for host in `cat host_file`
do
  remsh $host -n "
     cd /home/
     for DATABASE in `ls -d db[1-8]*`
     do
          [execute program] $DATABASE
     done"
done

Now my understanding is that you can't use new lines for remsh logic so the code would have to look like this:
Code:
for host in `cat host_file`
do
  remsh $host -n "cd /home/; for DATABASE in `ls -d db[1-8]*`; do; [execute program] $DATABASE;  done"
done

Unfortunately I get the following error:
Code:
ksh: syntax error at line 1 : `;' unexpected

So clearly I'm doing something wrong. I've tried chaning the placement of the semi colons but to no avail. Smilie
# 2  
Old 03-18-2011
This may work for you, I've done it in the past.

Enter the command line on your local box:
Code:
for i in 1 2 3 
do
   echo $i
done

ctrl/c to break the command (probably won't work locally anyway)
Next recall the command.
-for example in bash: ctrl-up arrow or ksh (with export EDITOR=vi) esc-k
You now have a line that looks like:
Code:
for i in 1 2 3 ^Jdo ^Jecho $i ^Jdone

scrape the screen, then paste the command string:
Code:
remsh host "for i in 1 2 3 ^Jdo ^Jecho $i ^Jdone"

# 3  
Old 03-18-2011
Don't put a semi-colon after a "do".
Code:
$ for i in a b c ; do echo $i ; done
a
b
c
$

# 4  
Old 03-18-2011
My advice. Protecting Shell special characters in a complex "remsh" line will drive you nuts. It is so important to be aware which Shell special characters will be executed on the local computer and which will be executed on the remote computer. It is not impossible to achieve but please bear in mind the next administrator who reads your code.

The professional approach is to first proliferate the script to each of the remote servers and then invoke the script from a "remsh" command.
This approach means that you can test the script while logged in to the remote server.
This User Gave Thanks to methyl For This Post:
# 5  
Old 03-19-2011
Although I answered the question that was asked, I always do as methyl suggests for any remote commands beyond a simple "uptime" or "date".

I do sometimes type in loops or quick function definitions at the command line locally as I showed in my example. So I stay up to speed on ksh syntax as well. Real example: I was on a broken system and cat and ls didn't work, nor did most commands. So I do a quick:
Code:
function mycat { while read l ; do echo "$l" ; done < $1 ; }
function myls { while [ $# -ne 0 ] ; do echo "$1" ; shift; done ;}

and I can look around with commands like "myls /etc/*" and "mycat somefile". It's very handy being able to pull stuff like that out of my hat when I need to.
# 6  
Old 03-19-2011
I'm rather fond of pdsh, which includes pdcp for copying files to/from a large number of nodes.

Previous Thread | Next Thread
Test Your Knowledge in Computers #132
Difficulty: Easy
Many of the command line and graphical utilities in a Linux distro are very similar to a Unix system.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Trying to run a basic for loop

OS : RHEL 6.1 Shell : Bash I had a similair post on this a few weeks back. But I didn't explain my requirements clearly then. Hence starting a new thread now. I have lots of files in /tmp/stage directory as show below. I want to loop through each files to run a command on each file. I... (8 Replies)
Discussion started by: kraljic
8 Replies

2. Shell Programming and Scripting

Run the for loop in parallel

I have the below code which runs on multiple databases , but this runs one-after-one. I will need this to run in parallel so that i could save a lot of time. Please help!!! Thanks in advance for Db in `cat /var/opt/oracle/oratab |egrep -v "ASM" |grep -v \# |cut -d\: -f1` do { export... (5 Replies)
Discussion started by: jjoy
5 Replies

3. Shell Programming and Scripting

How to run it in the loop??

I have this code awk -F, ' { C5+=$5 C6+=$6 C7+=$7 C8+=$8 R=$5+$6+$7+$8 T+=R } { print $0,R } END { print... (7 Replies)
Discussion started by: nikhil jain
7 Replies

4. Shell Programming and Scripting

Script for telnet and run one command kill it and run another command using while loop

( sleep 3 echo ${LOGIN} sleep 2 echo ${PSWD} sleep 2 while read line do echo "$line" PID=$? sleep 2 kill -9 $PID done < temp sleep 5 echo "exit" ) | telnet ${HOST} while is executing only command and exits. (5 Replies)
Discussion started by: sooda
5 Replies

5. Shell Programming and Scripting

Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it. To make a long story short around 20K pieces of... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

6. Shell Programming and Scripting

How To Run AWK via Remsh?

Boy I hope someone can answer this question. I've been beating my head against the wall all day trying to come up with a solution. I have a carrot delimited file that looks like this: ANDERSON^678934^1974^BOB JONES^564564345^1954^ABRAHAM SMITH^47568465^1948^JON If I run this command: awk... (6 Replies)
Discussion started by: Korn0474
6 Replies

7. UNIX for Advanced & Expert Users

remsh inside of while loop

I have a space delimited file containing: hostname OracleSID connectstring I want to loop through the file and execute remsh to check the database processes. cat $filename | while read HOST SID CONNECT do { result=`remsh $HOST "ps -ef | grep pmon_${SID}$| grep -v grep"` if ........ (1 Reply)
Discussion started by: joettacm
1 Replies

8. Shell Programming and Scripting

remsh newhost "for loop"

Hi, In ksh how can I execute something like this: remsh newhost "for i in 1 2 3 4 5 do echo file$i; cat file$i; done" I cannot pass the contrl J or enter in th above line which is required by the for loop. Thanks... (1 Reply)
Discussion started by: alantang
1 Replies

9. Shell Programming and Scripting

The loop does not run as expected

Hi folks, I have the following configuration file: DB_LAYER=NO ADMIN_LAYER=NO RTESUB_LAYER=NO DB_HOST_NAME=tornado ADMIN_HOST_NAME=tornado RTESUB_HOST_NAME=tornado RESPONSE_FILE_SR=/tmp/SR.rsp INSTALL_SR_1=/home/Upgrade_4.7.1/Utilities/Install_SR:Y... (8 Replies)
Discussion started by: nir_s
8 Replies

10. Shell Programming and Scripting

remsh and run script

Help! I'm would like to log in su - within a script an contuine to run the commands within the script. Every time I log in as su - I have to exit for the rest of the script to run! e.g. #!/bin/ksh su - oracle ps -ef |grep som <--- doesn't excute command until I log out su oracle.... (1 Reply)
Discussion started by: bugggg
1 Replies

Featured Tech Videos