Script for shutting down 48 computers

Hi All, I am pretty new to unix type languages. At work we have a server room with about 50 windows computers in one system and 50 in a unix system. We sometimes have power outages and I don't like the power slam. I wrote a windows batch file using sysinternals help to shutdown the windows computers. I am trying to write one for the unix servers. I started by using vi editor. I remember a little from school. Anyhoo, I start from one of the computers (I use ACC36 because that is where my KVM is. all are names ACC###)ACC36 and

ssh ACC30

to get to ACC30. Then my next line is

init 0

this is the shutdown command.
My next command is to get back to ACC36 before the shutdown is

ssh ACC36

Well, that works, but when I repeat the commands in the script for the other ACC's, it never goes past the first return to ACC36. After I write and save it with :wq , I then

chmod 755 power-off

Then to execute I go

./power-off

What am I doing wrong? Any help would be appreciated.

Try

while read COMP; do echo ssh $COMP init 0; done < complist

and supply the computer names in that list. I assumed e.g. ssh ACC36 will safely log you into that machine.
Remove the echo if you're happy with what you see.

If you shut down the computer the script is executing on - e.g., ACC36 is first in the list, you've lost scripting process. No more shutdowns. Be sure to run the script on the LAST ACCxxx box in your list of computers.

Depending on availability on your system, you might shutdown +5 .

I presume you are doing this as root. You allow root to ssh onto all your servers ?

Using rudiC example. Just add & on the end and/or </dev/null

while read COMP
 do 
     echo " Shutting down  "$COMP
     echo    ssh $COMP init 0  </dev/null  &  
 done < complist

If you are running remote ssh commands on a list of servers, you have to add
</dev/null at the end or it will exit after the first one.
With just </dev/null it will run the command on each server in foreground one after another.

You can also add & to the end and it will execute the command in background on each server and return at once.

Test the script with the echo first and then remove, when you want to use it.