translate a short csh script to bash

Hi,

I have a csh:

  set NODES = `cat $HOST_FILE`
  set NODELIST = $TMPDIR/namd2.nodelist
  echo group main >! $NODELIST
  foreach node ( $NODES )
    echo host $node >> $NODELIST
  end
  @ NUMPROCS = 2 * $#NODES

I am very frustrated to translate it to bash:

NODES = `cat $HOST_FILE`
NODELIST = $TMPDIR/namd2.nodelist
echo group main > NODELIST1
for  node in $NODES
do
    echo host $node >> $NODELIST
done
NUMPROCS = 2 * $#NODES

The script basically capture each line of file $NODELIST and add 'host' to the beginning of each line.
Can some please help to fix my translation?
Your time is greatly appreciated!
Todd

PLease, put code tags for your next post.

# NODES = `cat $HOST_FILE`
NODES=$(cat $HOST_FILE) # no spaces around '=' for a value affectation
# NODELIST = $TMPDIR/namd2.nodelist
NODELIST=$TMPDIR/namd2.nodelist # same as above
echo group main > NODELIST1
for node in $NODES
do
   echo host $node >> $NODELIST
done
# NUMPROCS = 2 * $#NODES
NUMPROCS=$((2 * ${#NODES})) # $(( )) is the construction for arithmetic evaluation

If you're nodes are separated by lines, a safer method would be:

HOST_FILE=<your path to host file>

NODES=()

while read; do
	NODES[${#NODES[@]}]=$REPLY
done < "$HOST_FILE"

NODESLIST=$TMPDIR/namd2.nodelist

echo "group main" > "$NODESLIST"

for NODE in "${NODES[@]}"; done
	echo "host $NODE" >> "$NODESLIST"
done

(( NUMPROCS = 2 * ${#NODES[@]} ))

And a simpler version could also be like this:

HOST_FILE=<your path to host file>
NODESLIST=$TMPDIR/namd2.nodelist
NODESCOUNT=0

{
	echo "group main"

	while read; do
		echo "nodes $REPLY"

		(( NODESCOUNT++ ))
	done < "$HOST_FILE"
} > "$NODESLIST"

(( NUMPROCS = 2 * NODESCOUNT ))

It can also be further simplified if you can use readarray or mapfile from bash 4.0+.

frans and konsolebox,
They worked.

Thanks a lot! Appreciate your help.