LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   How to use "for" modify my shell script (https://www.linuxquestions.org/questions/programming-9/how-to-use-for-modify-my-shell-script-4175454498/)

qrpengx 03-18-2013 04:29 AM

How to use "for" modify my shell script
 
hi~
I have a shell script.but it's too large.
How to use "for" modify this shell script.

#!/bin/sh
mono=`which mono`
Release_DIR="/opt/Release"
exe="${Release_DIR}/XXX.exe"
###########
server2_DIR="/opt/server2"
server3_DIR="/opt/server3"
server4_DIR="/opt/server4"
server5_DIR="/opt/server5"
server6_DIR="/opt/server6"
server7_DIR="/opt/server7"
server8_DIR="/opt/server8"
server9_DIR="/opt/server9"
server10_DIR="/opt/server10"
##########
s2=`netstat -ant|grep 0:5001|wc -l`
s3=`netstat -ant|grep 0:5002|wc -l`
s4=`netstat -ant|grep 0:5003|wc -l`
s5=`netstat -ant|grep 0:5004|wc -l`
s6=`netstat -ant|grep 0:5005|wc -l`
s7=`netstat -ant|grep 0:5006|wc -l`
s8=`netstat -ant|grep 0:5007|wc -l`
s9=`netstat -ant|grep 0:5008|wc -l`
s10=`netstat -ant|grep 0:5009|wc -l`
##########
if [ -d ${server2_DIR} ]; then
if [ $s2 -eq 0 ]; then screen -dmS S2 $mono $exe ${server2_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server3_DIR} ]; then
if [ $s3 -eq 0 ]; then screen -dmS S3 $mono $exe ${server3_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server4_DIR} ]; then
if [ $s4 -eq 0 ]; then screen -dmS S4 $mono $exe ${server4_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server5_DIR} ]; then
if [ $s5 -eq 0 ]; then screen -dmS S5 $mono $exe ${server5_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server6_DIR} ]; then
if [ $s6 -eq 0 ]; then screen -dmS S6 $mono $exe ${server6_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server7_DIR} ]; then
if [ $s7 -eq 0 ]; then screen -dmS S7 $mono $exe ${server7_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server8_DIR} ]; then
if [ $s8 -eq 0 ]; then screen -dmS S8 $mono $exe ${server8_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server9_DIR} ]; then
if [ $s9 -eq 0 ]; then screen -dmS S9 $mono $exe ${server9_DIR}/ > /dev/null 2>&1;fi
fi
if [ -d ${server10_DIR} ]; then
if [ $s10 -eq 0 ]; then screen -dmS S10 $mono $exe ${server10_DIR}/ > /dev/null 2>&1;fi
fi

mina86 03-18-2013 09:00 AM

Code:

for n in 2 3 4 5 6 7 8 9 10; do
    dir=/opt/server$n
    if [ -d "$dir" ] && ! netstat -ant | grep -q 0:$(($n + 4999)); then
        screen -dmS "S$n" "$mono" "$exe" "$dir/" >/dev/null 2>&1
    fi
done

Also, don't use grep … | wc -l. This can almost always be replaced with grep -c … and very often what you really want is grep's exit code as used above.

qrpengx 03-19-2013 12:16 AM

Thanks for replying.
It's working


All times are GMT -5. The time now is 01:35 AM.