(一)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