I may not have been clear enough so here's some sample bash code that does what I mean, I've put echo commands before the 3dZcutup, 3dTcat, and 3dDecon commands since I don't actually have any data with which to test this. Yo umay need to cut it up even more to get it to fit into memory depending on how many TRs you have, (which you didn't state).
#!/bin/bash
# 162 slices is mulitple of 9
inc=18
for run in $( seq 1 4) ; do
starts=( $( seq 0 $inc $( expr 162 - $inc ) ) )
for (( gg=0; gg<${#starts[*]}; gg++ )) ; do
start=${starts[$gg]}
(( end=start + inc -1 ))
echo 3dZcutup -prefix run$( printf "%02d" $run).zcut.$( printf "%02d" ${gg} ) -keep $start $end my_brik+orig.HEAD
## touch run$( printf "%02d" $run).zcut.$( printf "%02d" ${gg} )
done
done
## echo gg now stores the number of cuts or groups of slices
## now that the runs are broken into groups of 18 slices you can run
## 3dTcat to get all the tuns together for analysis with 3dDecon
for (( gg=0; gg<${#starts[*]}; gg++ )) ; do
echo 3dTcat -prefix all.runs.zcut$( printf "%02d" ${gg} ) run??.zcut.$( printf "%02d" ${gg} )
## touch all.runs.zcut$( printf "%02d" ${gg} )
echo 3dDeconvolve -input all.runs.zcut$( printf "%02d" ${gg} ) -prefix stats_zcut$( printf "%02d" ${gg} )
done
## now concat all the zcuts together
## 3dZcat -prefix stats stats_zcut??+orig.HEAD