@while+do。。。done和case。。。esac或者if。。。then。。fi的嵌套使用以及if的!判断@

(一)while do。。。done和case。。。esac嵌套使用

 cpsDeploy_menu(){
echo "   --- CPS APP Menu---   "
echo "   help app command: getdeploy app_name  "
#echo "deploy $size $app_name "
echo "   Check app status: status app_name:app_name "
echo "   Deploy Command  : deploy IP  app_name source_path/"
#echo

while true ; do
   read -p "App> "  appcomm deploylist(两个变量)

   case "$appcomm" in
        "quit")

             break
             ;;
        "getdeploy")
             echo "  Search $deploylist  :"
             num=`grep "^$deploylist" cpsapplist.prop  | wc  -l`
             if [ $num > 0 ];then
                  getdeployapp $deploylist
             else
                  echo "   Please sure the app name is correct!   "
             fi
             ;;
        "deploy")
             echo " cps app deployment now...."
             echo "deploy directory: $deploylist"
             deploywarapp  $deploylist
             #getdeploylist $deploylist
             ;;
        "status")
             getappstatus $deploylist
             ;;
   esac

done

}

注意:

在测试的过程中我发现了一个错误,就是那个if [ $num > 0 ]中不能够用>,正确的用法应该是

if [ $num-gt 0 ]

或者

if [ $num\>0 ]

或者

if [[ $num>0 ]]

 (二)while do。。。done和if。。。then。。。fi的嵌套使用

getappInfo(){
app=$1
i=0
sed -n "/^$app=/p" "$sordir"cpsapplist.prop | cut -d= -f2 |
while read i
do
  if [ ! -z "$i" ]
  then
    array=( `echo $i`)
    size=${#array[*]}

    ip=${array[0]}
    appid=${array[1]}
    appdir=${array[2]}
    startcmd=${array[3]}
    apptype=${array[4]}
  fi
done
}

点评:

首先getappInfo()是自定义的函数

然后用到一个管道命令

再有就是while do。。。done和if。。。then。。。fi的嵌套使用

最后在if。。。then判断语句中又用到了数组

这些都是这个函数的一大亮点~

ps:

break跳出整个循环

continue跳出本次循环,进行下次循环

(三)if的否定形式

#!/bin/bash
#Function:The statements of if's negative format
#

getAsInfo(){

userinfo=(`sh ~/zy/commonhelper.sh ~/zy/common.properties $1`)
if [ "$userinfo" = $1 ]
then
     echo ${userinfo[*]}
fi

}


getAppStatus(){
###  1 exist app
###  2 not exist app
###  3 exist app , not war
###  4 exist app , war name match
###  5 exist app , war name mismatch
local ip=$1
local oc4j=$2
local app=$3
asinfo=(`getAsInfo $1`)

serverXml=`ssh $ip  "cd /opt/oracle/product/10.1.3.1/OracleAS/j2ee/$oc4j/config ; grep '=\"$app\"' ./server.xml  "`
defaultWeb=`ssh $ip  "cd /opt/oracle/product/10.1.3.1/OracleAS/j2ee/$oc4j/config ; grep '=\"$app\"' ./default-web-site.xml "`

if [ "$serverXml" == ''  ]
then
   echo NotApp
else
   if [ "$defaultWeb" == ''  ]
   then
       echo NotWar
   else
       echo $defaultWeb |  sed -e 's/.*name=\"\(.*\)\"/\1/' | cut -d\" -f1
   fi
fi
#echo defaultWeb==$defaultWeb

}


iscontinue()
{
 while true
 do
  echo -n "$1 Continue?(Y/N)"
  read ANSWER
  case $ANSWER in
  [Yy]) return 1;;
  [Nn]) return 0;;
  *) echo "Answer Y or N";;
  esac
 done
}


deployHelper(){
ips=(`echo $1 | sed -e 's/:/ /g'`)
ipsize=${#ips[*]}
oc4j=$2
apps=(`echo $3 | sed -e 's/:/ /g'`)
appsize=${#apps[*]}
deployfile=$4
var_file=~/zy/global_var.log

echo "****************$deployfile"
if [ ! -d "$deployfile" ]
then
  echo "********$deployfile is not a directory !"
  exit 1 ;
fi


for((i=0;i<$ipsize;i++))
do
  deploy_host=${ips[i]}
  echo $deploy_host

    grep "$deploy_host.$oc4j=0" $var_file
   if [ $? -ne 0 ];then
      echo $deploy_host.$oc4j=0 >> $var_file
   fi

  for((j=0;j<$appsize;j++))
  do
      deploy_file="$deployfile"${apps[j]}.ear
      if [ ! -f "$deploy_file" ]
      then
         echo "********** $deploy_file is not a file"
   sed -i s/$deploy_host.$oc4j=1/$deploy_host.$oc4j=0/g $var_file
         exit 1 ;
      else
         remoteappstatus=`getAppStatus $deploy_host $oc4j ${apps[j]}`
         if [ "$remoteappstatus" == "NotApp" ]
         then
             echo "****** NotApp ${apps[j]} *******"
             if ! iscontinue "${apps[j]} is not exist,do you deploy it ."
             then
               echo "deploy a new app  ${apps[j]}"
             else
   sed -i s/$deploy_host.$oc4j=1/$deploy_host.$oc4j=0/g $var_file
               exit 1 ;
             fi
   sed -i s/$deploy_host.$oc4j=1/$deploy_host.$oc4j=0/g $var_file
#             exit 1 ;
         elif [ "$remoteappstatus" == "NotWar" ]
         then
             echo "NotWar"
         else
               warfile=`unzip -v $deploy_file | grep ".war" | awk '{print $8}'`
#               echo "*****************$warfile*********************"
               if [ -n "$warfile" ]
               then
                     webModuleName=${warfile%\.war}
                     if [ ! "$remoteappstatus"  = "$webModuleName" ]
                     then
                         echo "************** war name mismatch ************$remoteappstatus  -- $webModuleName"
   sed -i s/$deploy_host.$oc4j=1/$deploy_host.$oc4j=0/g $var_file
                         exit 1 ;
                     fi
               fi
         fi
      fi
  done
done

}

deployHelper $1 $2 $3 $4

测试:

[oracle@Test230 zy]$ sh noif.sh 192.168.55.230 CAV_OC4J app-pmo-cav /opt/oracle/deployfile/
****************/opt/oracle/deployfile/
192.168.55.230
192.168.55.230.CAV_OC4J=0

[oracle@Test230 zy]$ sh  ~/zy/noif.sh 192.168.55.230 CAV_OC4J test /opt/oracle/deployfile/
****************/opt/oracle/deployfile/
192.168.55.230
192.168.55.230.CAV_OC4J=0
************** war name mismatch ************test  -- app-pmo-cav
[oracle@Test230 zy]$ 

原因:解压出来的包名app-pmo-cav和配置文件default-web-site.xml中的WarName不一样~

[oracle@Test230 zy]$ unzip -v /opt/oracle/deployfile/test.ear
Archive:  /opt/oracle/deployfile/test.ear
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
       0  Defl:N        2   0%  03-08-11 23:18  00000000  META-INF/
      71  Defl:N       71   0%  03-08-11 23:18  18dc54d8  META-INF/MANIFEST.MF
14275126  Defl:N 14266829   0%  03-08-11 17:21  74dc37bd  
app-pmo-cav.war
     473  Defl:N      238  50%  03-08-11 23:18  fef11fe5  META-INF/application.xml
--------          -------  ---                            -------
14275670         14267140   0%                            4 files
[oracle@Test230 zy]$ unzip -v /opt/oracle/deployfile/test.ear|grep ".war"|awk '{print $8}'
app-pmo-cav.war


[oracle@Test230 zy]$ sh  ~/zy/noif.sh 192.168.55.230 CAV_OC4J app-pmo  /opt/oracle/deployfile/
****************/opt/oracle/deployfile/
192.168.55.230
192.168.55.230.CAV_OC4J=0
****** NotApp app-pmo *******
app-pmo is not exist,do you deploy it . Continue?(Y/N)y
deploy a new app  app-pmo

         if [ "$remoteappstatus" == "NotApp" ]
         then
             echo "****** NotApp ${apps[j]} *******"
             if ! iscontinue "${apps[j]} is not exist,do you deploy it ."
             then
               echo "deploy a new app  ${apps[j]}"
             else
   sed -i s/$deploy_host.$oc4j=1/$deploy_host.$oc4j=0/g $var_file
            echo "==========================else=====================================" 
               exit 1 ;
             fi

为了方便测试,我们特意加上了echo "==========================else====================================="这行,下面看测试结果就晓得了~

[oracle@Test230 zy]$ sh  ~/zy/noif.sh 192.168.55.230 CAV_OC4J app-pmo  /opt/oracle/deployfile/
****************/opt/oracle/deployfile/
192.168.55.230
192.168.55.230.CAV_OC4J=0
****** NotApp app-pmo *******
app-pmo is not exist,do you deploy it . Continue?(Y/N)y
deploy a new app  app-pmo
[oracle@Test230 zy]$ sh  ~/zy/noif.sh 192.168.55.230 CAV_OC4J app-pmo  /opt/oracle/deployfile/
****************/opt/oracle/deployfile/
192.168.55.230
192.168.55.230.CAV_OC4J=0
****** NotApp app-pmo *******
app-pmo is not exist,do you deploy it . Continue?(Y/N)n
==========================else=====================================
[oracle@Test230 zy]$ 

(四)99乘法表

#!/bin/bash
let j=1
while (($j<10))
do
 i=1
 while (($i<=$j))
 do 
   echo -n "$i*$j "
   if [ $i -eq $j ]
     then
  echo " "
     else
  :
   fi
   let "i=i+1"
 done
 let "j=j+1"
done
[oracle@sor-sys zy]$ sh 99.sh 
1*1  
1*2 2*2  
1*3 2*3 3*3  
1*4 2*4 3*4 4*4  
1*5 2*5 3*5 4*5 5*5  
1*6 2*6 3*6 4*6 5*6 6*6  
1*7 2*7 3*7 4*7 5*7 6*7 7*7  
1*8 2*8 3*8 4*8 5*8 6*8 7*8 8*8  
1*9 2*9 3*9 4*9 5*9 6*9 7*9 8*9 9*9  

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值