第二十四章 SHELL脚本-CENTOS7.5知识

shell脚本(四)

程序结构:
IF结构、for结构、while结构、case结构

1、分支结构
第二十四章 SHELL脚本-CENTOS7.5知识

2、分支示例

case语句编写
#!/bin/bash
case $1 in
anquan)
echo "学习四个月"
;;
java)
echo "学习五个月"
;;
*)
echo "去官网查看"
esac

示例1:
#!/bin/bash
clear
read -p "Please your admin choice:(bk|cn|tn)" MYCHOICE
case $MYCHOICE in
bk)
cd /tmp;tar zcvf myhostbak-10218.gz /etc/hosts
echo "备份完成"
ls -l /tmp/myhostbak-10218.gz
;;
cn)
ifconfig;route -n
;;
tn)
ping -c 2 172.18.11.1
traceroute 8.8.8.8
;;
*)
echo "what are you doing? flow me."
esac
echo "My program finished."

示例:
#!/bin/bash
clear
echo "------wang Tomcatadmin tools.------"
echo
echo
read -p "Please input tomadmin command:(kaishi|tingzhi|banben|neicun)" TOMadmin
case $TOMadmin in
kaishi)
cd /usr/local/tomcat/bin
./startup.sh
echo "tomcat7 启动成功。"
;;
tingzhi)
cd /usr/local/tomcat/bin
./startup.sh
echo "tomcat7 关闭成功。"
;;
banben)
cd /usr/local/tomcat/bin
./version.sh
;;
neicun)
free -m
;;
*)
echo "What are you doing?"
esac

echo "Service tomcat7管理工具运行结束"

示例:

#!/bin/bash
#write by jason,Goodmorning.
clear
while true
do
echo "====Good morning,it's time to work===="
read -p "Please input your choice(beifen|shownet|checknet|cls) :" MYCHOICE
if [ "$MYCHOICE" == "exit" ] ; then
exit
else
case $MYCHOICE in
beifen)
cd /tmp;tar zcvf myhostbak-$(date +%Y%m%d).tar.gz /etc/*.conf &>/dev/null
echo "Now,backuping ..."
echo "Backup finished."
ls -l /tmp/myhostbak-$(date +%Y%m%d).tar.gz
;;
shownet)
echo "Show all ipaddress"
ifconfig |grep netmask|awk '{print $2}'
echo "Default gateway:"
route -n|awk '/UG/{print $2}'
;;
checknet)
clear
echo "To localnet,testing..."
ping -c 1 172.18.11.11
echo "To internet,testing..."
ping -c 1 -w 2 8.8.8.8
;;
cls)
clear
;;

*)
echo "Please read notice again."
esac
echo "The case end."

3 sed流编辑器

.3.1 sed strem editor 流编辑器

sed的执行过程:

1)、 一次读取一行数据
2)、 根据我们提供的规则来匹配相关的数据,比如查找root。
3)、 按照命令修改数据流中的数据,比如替换
4)、 将结果进行输出
5)、 重复上面四步

.3.2 如何使用
语法格式:sed [options] ‘[commands]’ filename

例1:
[[email protected] ~]# echo "this is aplle" | sed 's/aplle/dog/'
this is dog
[[email protected] ~]# echo "this is aplle" > a.txt
[[email protected] ~]# sed 's/aplle/dog/' a.txt
this is aplle

.3.3 sed选项|参数
-h帮助
-n只显示匹配内容
--version版本
命令:
i 在当前行上面插入文件
c 把选定的行改为新的指定的文本
p 打印
d 删除
s 替换

例1:单行替换,将第2行中bin替换成wang
[[email protected] ~]# sed '2s/bin/wang/' /etc/passwd | more
root:x:0:0:root:/root:/bin/bash
wang:x:1:1:bin:/bin:/sbin/nologin

例2:多行替换,如果涉及到多行处理,用逗号表示行间隔。 将第3行到最行尾中bin替换成wang
[[email protected] ~]# sed '2,$s/bin/wang/' /etc/passwd | more
root:x:0:0:root:/root:/bin/bash
wang:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/swang:/sbin/nologin
adm:x:3:4:adm:/var/adm:/swang/nologin

(3)d 删除第2行到第4行的内容
[[email protected] ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 wang63.cn
192.168.1.64 wang64.cn
192.168.1.62 wang62.cn

[[email protected] ~]# sed '2,4d' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.62 wang62.cn

[[email protected] ~]# sed '/192.168/d' /etc/hosts #将包括192.168的行删除
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

(4)添加行
 命令i(insert插入),在当前行前面插入一行 i\
 命令a(append附加),在当前行后面添加一行 a\

例1:插入
[[email protected] ~]# echo "hello world" | sed 'i\ wang '
wang
hello world

例2:追加
[[email protected] ~]# echo "hello world"|sed 'a\wang'
hello world
wang

例3:在文件最后追加内容
[[email protected] ~]# sed '$a\192.168.1.65 wang65.cn' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 wang63.cn
192.168.1.64 wang64.cn
192.168.1.62 wang62.cn
192.168.1.65 wang65.cn

例4:在文件中第2行之后,开始追加内容
[[email protected] ~]# sed '2a\192.168.1.65 wang65.cn' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.65 wang65.cn
192.168.1.63 wang63.cn
192.168.1.64 wang64.cn
192.168.1.62 wang62.cn

例5:在文件中第2行到第4行之后分别追加内容
[[email protected] ~]# sed '2,4a\hello world' word1.txt
[[email protected] ~]# sed '2,4a\192.168.1.65 wang65.cn' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.65 wang65.cn
192.168.1.63 wang63.cn
192.168.1.65 wang65.cn
192.168.1.64 wang64.cn
192.168.1.65 wang65.cn
192.168.1.62 wang62.cn

(5)修改行命令c (change) c
例1:将第4行内容改成192.168.1.65 wang65.cn
[[email protected] ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 wang63.cn
192.168.1.64 wang64.cn
192.168.1.62 wang62.cn
[[email protected] ~]# sed '4c\192.168.1.65 wang65.cn' /etc/hosts

例2:将第2行到最后全部修改成192.168.1.65 wang65.cn
[[email protected] ~]# sed '2,$c\192.168.1.65 wang65.cn' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.65 wang65.cn

例3:将包括192.168.1.64行的内容修改成192.168.1.65
[[email protected] ~]# sed '/192.168.1.64/c\192.168.1.65' /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 wang63.cn
192.168.1.65
192.168.1.62 wang62.cn

(6)打印,直接输入文件中的内容
例1:输入第2行内容
[[email protected] ~]# sed -n '2p' /etc/hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

(7)将修改或过滤出来的内容保存到另一个文件中
例2:将passwd中的包括root字样的行保存到 c.txt 中
[[email protected] ~]# sed -n '/root/w c.txt' /etc/passwd

[[email protected] ~]# cat c.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

===============

作业:
1、安装tomcat,写出此程序的start,stop,ver相应的case操作菜单。

转载于:https://blog.51cto.com/jxwpx/2318423