E se você fizesse assim?
#/bin/bash
input1='20160101'
input2='10' #(Note: These are inputs to each of the scripts I want to run)
scriptdir='/path/to/somewhere'
for q in {00..23}
do
hh="${q}"
echo "$hh"
( bash "$scriptdir/Hour$hh.csh" "$input1" "$input2" ) &
sleep 30
done
wait
echo "All done!"
Como foi apontado nos comentários, o &
está fazendo com que seu sleep
também seja executado em segundo plano e, portanto, seu script não esperará que ele termine antes de passar para a próxima iteração do loop. Também sua matriz hourr
é desnecessária