您的位置:首页 > 运维架构 > Shell

一个shell脚本引发的对于分号(;)和$#的使用说明(转载)

2013-01-24 21:45 543 查看
背景

由于在工作中需要一次性关闭linux的opt目录下安装的多个tomcat,因此有了写一个脚本统一关闭开启这个目录下所有tomcat的想法

前提

Tomcat安装目录结构: /opt/tomcat/tomcat_8080;/opt/tomcat/tomcat_9080……

思路

循环调用tomcat自身bin目录下的startup.sh、shutdown.sh开启或是关闭tomcat服务

脚本 TomCtrol.sh

#! /bin/sh

#定义批量处理端口
p=(4080 7080)

#开启或关闭tomcat服务器
startOrCloseTomcat(){
if [ $1 = -s ] ; then #执行开启命令
foreachStartup
elif [ $1 = -c ] #执行关闭命令
then
foreachShutdown
else
echo "参数不正确!请重新输入!"
exit #退出该函数
fi
}

#循环开启tomcat
foreachStartup(){
for port in ${p[@]}
do
s_res=`/opt/tomcat/*tomcat*$port/bin/startup.sh`
echo "$port-tomcat已经开启!"
done
}

#循环关闭tomcat
foreachShutdown(){
for port in ${p[@]}
do
s_res=`/opt/tomcat/*tomcat*$port/bin/shutdown.sh`
echo "$port-tomcat已经关闭!"
done
}

if [ $# -eq 0 ]
then
echo "请输入执行参数"
echo " -s 启动所有/opt/tomcat/下的tomcat"
echo " -c 关闭所有/opt/tomcat/下的tomcat"
else
#echo "start repari .."
startOrCloseTomcat $1
fi

关于shell脚本中分号(;)——命令分割符 的使用说明

首先先看几种写法,这里用if语句作为例子。

第一种

test(){
if [ 1 -eq 1 ]; then
echo "1=1"
else
echo "1!=1"
fi
}

第二种

test1(){
if [ 1 -eq 1 ]
then echo "1=1"
else echo "1!=1"
fi
}

第三种

test2(){ if [ 1 -eq 1 ] ; then echo "1=1" ; else echo "1!=1" ; fi }

由此可见分号是用来隔断每个语法关键字或命令的 。对于字符的比较及其他shell语法关键字之间分号的使用方式相同。需要知道的是在不同的语法命令之间要用分号隔开或是换行方能执行,否则将会在调用脚本的时候报错。

补充

if语句后的表达式比较变量要与比较操作符用空格分开。if [ 1 -eq 1 ]不能写成if[ 1 -eq 1 ] 、if [1 -eq 1 ]、if [ 1 -eq 1]、if [ 1-eq1 ]
shell中用arrary=(arr1 arr2 arr3 ……) 的方式声明数组
访问数组时使用${arrary[@]}访问整个数组 ,使用${p[index]}访问数组中的某个特定的值
变量赋值时变量名跟等号之间不能有空格
$# ——传给shell程序的位置参数个数;$0 ——脚本名称;$? ——最后命令的完成码或在shell程序内所执行的shell程序;$n (n>0)——获取传递的第n个参数
cd /opt/tomcat/tomcat*0 * 号代表匹配0..n个字符;cd /opt/tomcat/to?cat ? 号代表匹配1个字符


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/oxcow/archive/2009/11/24/4865063.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐