月份:2017年8月
shell习题-找出活动ip
写一个shell脚本,把192.168.0.0/24网段在线的ip列出来。
思路: for循环, 0.1 — 0.254 依次去ping,能通说明在线。
参考答案:
#!/bin/bash ips="192.168.1." for i in `seq 1 254` do ping -c 2 $ips$i >/dev/null 2>/dev/null if [ $? == 0 ] then echo "echo $ips$i is online" else echo "echo $ips$i is not online" fi done
shell习题-日志归档
类似于日志切割,系统有个logrotate程序,可以完成归档。但现在我们要自己写一个shell脚本实现归档。
举例: 假如服务的输出日志是1.log,我要求每天归档一个,1.log第二天就变成1.log.1,第三天1.log.2, 第四天 1.log.3 一直到1.log.5
参考答案:
#!/bin/bash function e_df() { [ -f $1 ] && rm -f $1 } for i in `seq 5 -1 2` do i2=$[$i-1] e_df /data/1.log.$i if [ -f /data/1.log.$i2 ] then mv /data/1.log.$i2 /data/1.log.$i fi done e_df /data/1.log.1 mv /data/1.log /data/1.log.1
shell习题-打印只有一个数字的行
如题,把一个文本文档中只有一个数字的行给打印出来。
参考答案:
#!/bin/bash f=/etc/passwd line=`wc -l $f|awk '{print $1}'` for l in `seq 1 $line`; do n=`sed -n "$l"p $f|grep -o '[0-9]'|wc -l`; if [ $n -eq 1 ]; then sed -n "$l"p $f fi done
shell习题-抽签脚本
1、写一个脚本执行后,输入名字,产生随机数01-99之间的数字。
2、如果相同的名字重复输入,抓到的数字还是第一次抓取的结果,
3、前面已经抓到的数字,下次不能在出现相同数字。
4、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出
继续等待别的学生输入。
参考答案
while : do read -p "Please input a name:" name if [ -f /work/test/1.log ];then bb=`cat /work/test/1.log | awk -F: '{print $1}' | grep "$name"` if [ "$bb" != "$name" ];then #名字不重复情况下 aa=`echo $RANDOM | awk -F "" '{print $2 $3}'` while : do dd=`cat /work/test/1.log | awk -F: '{print $2}' | grep "$aa"` if [ "$aa" == "$dd" ];then #数字已经存在情况下 echo "数字已存在." aa=`echo $RANDOM | awk -F "" '{print $2 $3}'` else break fi done echo "$name:$aa" | tee -a /work/test/1.log else aa=`cat /work/test/1.log | grep "$name" | awk -F: '{print $2}'` #名字重复 echo $aa echo "重复名字." fi else aa=`echo $RANDOM | awk -F "" '{print $2 $3}'` echo "$name:$aa" | tee -a /work/test/1.log fi done
shell习题-猜数字
写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个小于100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比预设数字大或者小。
参考答案:
#!/bin/bash m=`echo $RANDOM` n1=$[$m%100] while : do read -p "Please input a number: " n if [ $n == $n1 ] then break elif [ $n -gt $n1 ] then echo "bigger" continue else echo "smaller" continue fi done echo "You are right."
shell习题-下载文件
创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则>返回0给调用脚本,否则,返回52给调用脚本;
提示,在函数中返回错误值给调用脚本,使用return
参考答案:
#!/bin/bash if [ ! -d $2 ] then echo "please make directory" exit 51 fi cd $2 wget $1 n=`echo $?` if [ $n -eq 0 ];then exit 0 else exit 52 fi
shell习题-列出子目录
脚本的功能:
脚本可以带参数也可以不带,参数可以有多个,每个参数必须是一个目录,脚本检查参数个数,若等于0,则列出当前目录本身;否则,显示每个参数包含的子目录。
参考答案
#!/bin/bash if [ $# == 0 ] then ls -ld `pwd` else for i in `seq 1 $#` do a=$i echo "ls ${!a}" ls -l ${!a} |grep '^d' done fi
标注: 你可能会对${!a}有疑问,这里是一个特殊用法,在shell中,$1为第一个参数,$2为第二个参数,以此类推,那么这里的数字要是一个变量如何表示呢?比如n=3,我想取第三个参数,能否写成 $$n? shell中是不支持的,那怎么办? 就用脚本中的这种方法: a=$n, echo ${!a}
shell习题-获取ip
提示用户输入网卡的名字,然后我们用脚本输出网卡的ip。 看似简单,但是需要考虑多个方面,比如我们输入的不符合网卡名字的规范,怎么应对。名字符合规范,但是根本就没有这个网卡有怎么应对。
参考答案:
#!/bin/bash while : do read -p "请输入网卡名: " e e1=`echo "$e" | sed 's/[-0-9]//g'` e2=`echo "$e" | sed 's/[a-zA-Z]//g'` if [ -z $e ] then echo "你没有输入任何东西" continue elif [ -z $e1 ] then echo "不要输入纯数字在centos中网卡名是以eth开头后面加数字" continue elif [ -z $e2 ] then echo "不要输入纯字母在centos中网卡名是以eth开头后面加数字" continue else break fi done ip() { ifconfig | grep -A1 "$1 " |tail -1 | awk '{print $2}' | awk -F ":" '{print $2}' } myip=`ip $e` if [ -z $myip ] then echo "抱歉,没有这个网卡。" else echo "你的网卡IP地址是$myip" fi
nginx的alias和root的区别
假设,网站的域名为 http://abc.com/,下面分别写两个配置来说明alias和root的区别。
location /123/ {
root /data/wwwroot/abc.com;
}
location /123/ {
alias /data/dir/;
}
上面两段配置,如果访问的链接地址为 http://abc.com/123/1.jpg
第一段会访问服务器上的/data/wwwroot/abc.com/123/1.jpg
第二段配置会访问服务器上的/data/dir/1.jpg
总结一下,用root时,要加上location后面的目录/123/,用alias时,不加/123/目录。
另外还需要注意下面要求:
1) 使用alias时,后面跟的目录结尾必须要加/
2) alias只能在location中使用
tomcat单机多实例
2017年8月31日
未分类
No Comments
aming
需求是: 同一个tomcat服务下,可以访问多个域名。
先来看看tomcat配置文件server.xml的结构
<Server>
<Service name=”xxx”>
<Host name=”aaa.com” appBase=”dir1″>
</Host>
</Service>
<Server>
说明:
Service下面可以定义监听的端口,包含了<Host></Host>,而<Host></Host>里面定义虚拟主机,即,定义站点的域名和站点的目录。
两种方案:
1 可以在<Service></Service>里面定义多个<Host></Host>,这样就定义了多个站点,但端口不能变。
2 可以在<Server></Server>里面定义多个<Service></Service>,<Service></Service>里再定义<Host></Host>,这样做的好处是,可以更改监听端口。
假设需求为:
同一个服务器上跑两个站点
www.aaa.com 监听端口是8080
www.bbb.com 监听端口是8081
配置文件内容为:
<GlobalNamingResources>
<!– Editable user database that can also be used by
UserDatabaseRealm to authenticate users
–>
<Resource name=”UserDatabase” auth=”Container”
type=”org.apache.catalina.UserDatabase”
description=”User database that can be updated and saved”
factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”
pathname=”conf/tomcat-users.xml” />
</GlobalNamingResources>
<!– A “Service” is a collection of one or more “Connectors” that share
a single “Container” Note: A “Service” is not itself a “Container”,
so you may not define subcomponents such as “Valves” at this level.
Documentation at /docs/config/service.html
–>
<Service name=”Catalina”>
<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
</Realm>
<Host name=”www.aaa.com” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”aaa.com_access” suffix=”.log”
pattern=”%h %l %u %t "%r" %s %b” />
</Host>
</Engine>
</Service>
<Service name=”aming”>
<Connector port=”8081″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Engine name=”aming” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
</Realm>
<Host name=”www.bbb.com” appBase=”/data/tomcat”
unpackWARs=”true” autoDeploy=”true”>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”bbb.com_access” suffix=”.log”
pattern=”%h %l %u %t "%r" %s %b” />
</Host>
</Engine>
</Service>
</Server>
tomcat