目录

case分支

编写nginx脚本

shell函数

什么是函数?

使用函数的好处?

服务脚本中的函数应用

如何定义一个函数

脚本中断

编写脚本,从1-20中找到6的倍数

编写脚本,for嵌套

字符串处理

1.字符串截取

编写一个脚本,随机截取字符串

编写脚本,随机截取八位密码

2.字符串替换

3.字符串删除

编写批量修改扩展名的脚本(使用字符串的删除功能)

编写九九乘法表脚本


case分支

case分支,功能类似于if,不如if强大,但代码比if精简

case  变量  in

模式1)

      指令1;;

模式2)

      指令2;;

*)

    指令n

esac

root@server0 opt]# vim test01.sh
#!/bin/bash
case  $1  in
a)echo  "aaa";;
b)echo  "bbb";;
*)echo   "请输入a或b"
esac
[root@server0 opt]# vim test01.sh#!/bin/bash
case  $1  in
t|T)                                    #输入小写t或大写T都可以touch  $2";;
m|M|mm) echo  "2";;
r) echo   "请输入t|m/r"
esac

编写nginx脚本

  • 1.在真机上找到nginx源码包,远程复制到虚拟机server
student@room9pc01 ~]$ cd  /linux-soft/02
[student@room9pc01 02]$ ls
ceph10.iso  exam  exam.tar.gz  grade  grade.tar.gz  lnmp_soft.tar.gz
[student@room9pc01 02]$ scp  lnmp_soft.tar.gz   root@172.25.0.11:/opt
lnmp_soft.tar.gz                                                       100%  155MB  18.0MB/s   00:08   
  • 2.在虚拟机server上解压到当前文件
[root@server0 opt]# ls
lnmp_soft.tar.gz  rh  test01.sh[root@server0 opt]# tar -xf  lnmp_soft.tar.gz   -C  .  #解压到当前[root@server0 opt]# ls
lnmp_soft  lnmp_soft.tar.gz  rh  test01.sh[root@server0 opt]# ls lnmp_soft
apache-tomcat-8.0.30.tar.gz             php-fpm-5.4.16-42.el7.x86_64.rpm
apache-tomcat-9.0.6.tar.gz              php-mbstring-5.4.16-42.el7.x86_64.rpm
buffer.sh                               php_scripts
DenyHosts-2.6.tar.gz                    pssh-2.3.1-5.el7.noarch.rpm
install_lnmp.sh                         python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm
jenkins-2.164.3-1.1.noarch.rpm          redis-3.0.6.tar.gz
libevent-devel-2.0.21-4.el7.x86_64.rpm  tomcat_session
nginx-1.10.3.tar.gz                     varnish-5.2.1.tar.gz
nginx-1.12.2.tar.gz                     vpn
nginx-1.15.8.tar.gz                     wordpress.zip
nginx.conf.bak                          www_template.zip
nginx.spec                              zabbix-3.4.4.tar.gz
php-bcmath-5.4.16-42.el7.x86_64.rpm
[root@server0 opt]# cp  lnmp_soft/nginx-1.12.2.tar.gz   .    #复制到当前[root@server0 opt]# ls
lnmp_soft  lnmp_soft.tar.gz  nginx-1.12.2.tar.gz  rh  test01.sh
  • 3.部署安装nginx脚本
[root@server0 opt]# vim  test02.sh
#!/bin/bash
yum  -y  install   gcc  openssl-devel   pcre-devel   #安装源码编译包以及依赖包们
tar  -xf nginx-1.12.2.tar.gz             #解压
cd  nginx-1.12.2                         #切换到nginx的默认路径
./configure                              #源码编译安装
make
make install
[root@server0 opt]# bash test02.sh[root@server0 opt]# cd /usr/local/nginx/sbin/    #切换到nginx程序所在目录[root@server0 sbin]# ls                          #查看,nginx为可执行文件
nginx
[root@server0 sbin]# ./nginx                     #执行nginx程序
[root@server0 sbin]# systemctl stop firewalld    #关闭防火墙#此时在真机上打开浏览器访问172.25.0.11可以看到nginx的欢迎界面

natestat  

netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:

-n        以数字格式显示端口号

-t          显示TCP连接的端口

-u         显示UDP连接的端口

-l          显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p         显示监听端口的服务名称是什么(也就是程序名称)

-ntulp   查看该服务所有信息

[root@server0 sbin]# netstat   -ntulp  |  grep nginx     #查看nginx的服务信息
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      550/nginx: master p 
  • 4.写nginx状态的脚本
[root@server0 sbin]# vim test03.sh
#!/bin/bash
case $1  in
kai)netstat  -ntulp  | grep  -q  nginxif [  $?  -eq  0 ];thenexitfi/usr/local/nginx/sbin/nginx;;              #开启nginx服务
guan)netstat  -ntulp  | grep  -q  nginxif  [ $?  -ne   0  ];thenexit fi/usr/local/nginx/sbin/nginx  -s  stop;;    #关闭nginx服务
res)/usr/local/nginx/sbin/nginx  -s  stop      #重起nginx服务(先关闭再开启)/usr/local/nginx/sbin/nginx;;              #case分支在命令输完再写双分号
cha)netstat  -ntulp  | grep  -q  nginx        #grep  -q  等同于/dev/null,把输出信息扔到黑洞[ $? -eq 0  ]&& echo -e  "\033[32m服务已开启\033[0m" || echo -e "\033[31m服务未开启\033[0m";;          #当服务开启时候显示绿色,未开启显示红色
*)  echo "请输入kai|guan|res|cha"
esac
[root@server0 sbin]# bash test03.sh  guan         #关闭nginx服务[root@server0 sbin]# bash test03.sh  kai          #开启nginx服务[root@server0 sbin]# bash test03.sh  res          #重起nginx服务[root@server0 sbin]# bash test03.sh  cha          #查看当前nginx服务状态
服务未开启

[root@server0 sbin]# echo  -e  "\033[31mABCD\033[0m"      #\033[   要改颜色  \033[0m改为默认     #31m是红色
ABCD
[root@server0 sbin]# echo  -e  "\033[32maaaa\033[0m"        #32m为绿色
aaaa
[root@server0 sbin]# echo  -e  "\033[33maaaa\033[0m"        #33m为黄色
aaaa
[root@server0 sbin]# echo  -e  "\033[34mbbb\033[0m"          #34m为蓝色
bbb
[root@server0 sbin]# echo  -e  "\033[35mffff\033[0m"             #35m为紫色
ffff

31-35改前景色
41-45改背景色
91-95改为高亮



shell函数

什么是函数?

可以将公共的语句块定义成一个名称,来达到精简脚本的目的

使用函数的好处?

  • 使脚本代码更简洁,增强易读性
  • 提高shell脚本的执行效率

服务脚本中的函数应用

  • 适用于比较复杂的启动/终止控制操作
  • 方便在需要时多次调用

如何定义一个函数

function   函数名{

       命令序列

        ....

}

或者

函数名(){

    命令序列

    .....

  • 调用已定义的函数

格式: 函数名

先定义了才能调用,就好比脚本的"内部命令"

  • 函数传值

格式: 函数名  值1  值2....

传递的值作为函数的"位置参数"

[root@server0 opt]#  vim  test04.sh#!/bin/bash
cecho() {                              #在函数中定义变量,改变输出参数的颜色
echo -e  "\033[$1m$2\033[0m"
}

cecho  32  qqqq                       
cecho  33  zzzz
cecho  34  ssss
cecho  91  aaaa
[root@server0 sbin]# bash test04.sh
qqqq                                    #我是绿色的
zzzz                                    #我是黄色
ssss                                    #我是蓝色
aaaa                                    #我是高亮红


脚本中断

类型 含义
break 跳出当前所在的循环体,执行循环体后的语句块
continue 跳过循环体内余下的语句,重新判断条件以决定是否需要执行下一次循环
exit 退出脚本,默认返回值为0

编写脚本,可以帮助用户计算整数的求和

[root@server0 opt]# vim test05.sh
#!/bin/bash
x=0
while :
do
read -p  "请输入一个数字求和,0是结束" n
[ $n  -eq 0  ]&& break         #还要继续循环之后的任务,所以要用break
let x+=n
done
echo $x

编写脚本,从1-20中找到6的倍数

[root@server0 opt]# vim test06.sh
#!/bin/bash
for i in {1..20}
dox=$[i%6][ $x  -ne 0  ] && continue        #当$x不等于0,则终止当前循环,继续下一次循环echo $i
done
[root@server0 opt]# bash test06.sh
6
12
18

编写脚本,for嵌套

[root@server0 opt]# vim test07.sh
#!/bin/bash
for i in {1..3}
dofor i in {1..3}doecho -n  "X"          #echo  -n  不换行输出doneecho
done
[root@server0 opt]# bash test07.sh
XXX
XXX
XXX


字符串处理

1.字符串截取

  • 使用${}表达式,格式:  ${变量名:起始位置:长度}     (起始位置的编号从0开始,可省略)

编写一个脚本,随机截取字符串

[root@server0 opt]# vim test08.sh
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
n=$[RANDOM%62]
echo ${x:n:1}
[root@server0 opt]# bash test08.sh
7
[root@server0 opt]# bash test08.sh
y
[root@server0 opt]# bash test08.sh
J
[root@server0 opt]# bash test08.sh
r
[root@server0 opt]# bash test08.sh
r

编写脚本,随机截取八位密码

[root@server0 opt]# vim test08.sh
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8}
do
n=$[RANDOM%62]
pass=${x:n:1}
pass1=$pass1$pass
done
echo $pass1
pass1=                                 #设置pass1的值为空,每次运行后自动还原pass1的值
[root@server0 opt]# bash test08.sh
BTfQh0E5
[root@server0 opt]# bash test08.sh
wjpBZPQp
[root@server0 opt]# . test08.sh
wQw6XEBR
[root@server0 opt]# . test08.sh
b8ag5frW

2.字符串替换

  • 使用${}表达式,格式:  替换第1个匹配结果  ${变量名/old/new}
  • 替换全部匹配结果  ${变量名//old/new}
  • 在一定程度上可以删除某个结果${变量名/old/}

3.字符串删除

  • 使用${}表达式,格式:  ${变量名#  }  从左往右删除
[root@server0 opt]# a=`head -1  /etc/passwd`
[root@server0 opt]# echo $a
root:x:0:0:root:/root:/bin/bash
[root@server0 opt]# echo ${a#root}                 #删除到第一个root
:x:0:0:root:/root:/bin/bash
[root@server0 opt]# echo ${a##*root}               #删除到最后一个root
:/bin/bash
[root@server0 opt]# echo ${a##*/}                  #删除到最后一个/
bash
  • 使用${}表达式,格式: ${变量名%    } 从右往左删除
[root@server0 ~]#  a=`head -1  /etc/passwd`
[root@server0 ~]# echo $a
root:x:0:0:root:/root:/bin/bash
[root@server0 ~]# echo ${a%bash}                  #删除到第一个bash
root:x:0:0:root:/root:/bin/
[root@server0 ~]# echo ${a%/*}                    #删除到第一个/bash
root:x:0:0:root:/root:/bin
[root@server0 ~]# echo ${a%%/*}                   #删除到最后一个/
root:x:0:0:root:
[root@server0 ~]# echo ${a%%:*}                   #删除到最后一个:
root

按条件掐头去尾

  • 字符串掐头:  从左向右,最短匹配删除    格式:   ${变量名#*关键词}  
  •                      从左向右,最长匹配删除    格式:   ${变量名##*关键词}
  • 字符串去尾:  从右向左,最短匹配删除    格式:  ${变量名%关键词*}
  •                      从右向左,最长匹配删除    格式:  ${变量名%%关键词*}

编写批量修改扩展名的脚本(使用字符串的删除功能)

[root@server0 opt]# touch abc{1..10}.txt     #批量创建文件
[root@server0 opt]# ls
abc10.txt  abc3.txt  abc6.txt  abc9.txt          nginx-1.12.2         test01.sh  test06.sh  test09.sh
abc1.txt   abc4.txt  abc7.txt  lnmp_soft         nginx-1.12.2.tar.gz  test02.sh  test07.sh
abc2.txt   abc5.txt  abc8.txt  lnmp_soft.tar.gz  rh                   test05.sh  test08.sh
[root@server0 opt]# vim  test09.sh
#!/bin/bash
for i in  `ls *.$1`
do
n=${i%.*}                                    #n是去除了扩展名的文件名
mv  $i  $n.$2                               #将原文件修改为文件名.doc
done
[root@server0 opt]# bash test09.sh    txt   doc
[root@server0 opt]# ls
abc10.doc  abc3.doc  abc6.doc  abc9.doc          nginx-1.12.2         test01.sh  test06.sh  test09.sh
abc1.doc   abc4.doc  abc7.doc  lnmp_soft         nginx-1.12.2.tar.gz  test02.sh  test07.sh
abc2.doc   abc5.doc  abc8.doc  lnmp_soft.tar.gz  rh                   test05.sh  test08.sh


编写九九乘法表脚本

[root@server0 opt]# vim test10.sh
#!/bin/bash
for i in {1..9}
dofor j in `seq $i`doecho -n "${i}x$j=$[i*j] "doneecho
done
[root@server0 opt]# bash test10.sh
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6  3x3=9
4x1=4 4x2=8  4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

case分支 shell函数 字符串的处理相关推荐

  1. 0503、while循环、循环的控制、case分支、函数、字符串的处理

    目录 一.while循环,可以根据条件决定循环次数,也可以实现无限循环 二.循环的控制 三.case分支 示例1: 示例2:nginx **nginx 是搭建网站的服务** 安装nginx (1)源码 ...

  2. Shell编程之条件语句(if语句,case分支语句)

    Shell编程之条件语句 一.条件测试操作 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if语句 单分支结构 双分支结构 多分支结构 三.case分支语句 一.条 ...

  3. shell脚本详解(二)——条件测试、if语句和case分支语句

    shell脚本详解(二)--条件测试.if语句和case分支语句 一.条件测试 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if条件语句 1.单分支 2.双分支 ...

  4. Shell编程之case语句与函数

    一.case语句 1.语法结构 2.应用案例 1)脚本传不同值做不同事 2)根据用户需求选择做事 二.函数 1.什么是函数? 2.如何定义函数? 3.函数如何调用? 1)当前命令行调用 2)定义到用户 ...

  5. linux shell 字符串 数组,bash shell函数返回数组字符串

    #!/bin/bash # script:getselfvar.sh # 每个脚本中都在末尾追加了一段特殊的域名ip序列,需要将这段序列存放到数组变量中,供 # 脚本使用,例子中的ip和域名是处理过的 ...

  6. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

  7. shell 函数的高级用法

    函数介绍 linux shell中的函数和大多数编程语言中的函数一样 将相似的任务或者代码封装到函数中,供其他地方调用 语法格式 如何调用函数 shell终端中定义函数 [root@master da ...

  8. Shell函数的高级用法

    Shell函数的高级用法 一.函数的定义和使用 1.语法格式 2.如何调用函数 3.示例演示 4.小脚本(nginx守护进程) 二.向函数传递参数 1.Shell中传参 2.Shell中函数调用 3. ...

  9. Shell 函数、数组与正则表达式

    防伪码:白日依山尽,黄河入海流. 5.1  函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a func ...

最新文章

  1. setuid和setgid
  2. python3.7如何使用enum_我如何用Python表示‘Enum’?
  3. JAVA不借助第三个变量实现两个变量交换的思考
  4. 数据库视频总结二(Transact-SQL语言)
  5. python word 表格 框线_python设置表格边框的具体方法
  6. out类型参数的讲解
  7. cookielifetime php_PHP session有效期session.gc_maxlifetime的设置方法
  8. vue 多点触控手势_涨姿势了!Appium也可以多点触控操作
  9. linux ifcfg-33 没有eth0解决方法
  10. 如何免费搭建自己的个人网站
  11. 有趣的算法:捞鱼问题
  12. html5光线传感器,HTML5设备传感器总结
  13. 【无人机摄影测量技术必备知识】地面像控点布设经验整理-大比例尺
  14. 用人工智能设计超酷T恤,除了那专属感,还透露了这些时装设计大趋势 || 万有AI...
  15. 字节跳动2018.11校招测试岗笔试(回忆版)
  16. 高效能人士的七个习惯 与成功有约
  17. Centos7 编译安装git 报错 git-compat-util.h:14:2: error
  18. python抓取微信_python抓取搜狗微信公众号文章
  19. 关于卸载流氓软件的通用办法
  20. led和cob灯的区别

热门文章

  1. Chrome 中的 JavaScript 断点设置和调试技巧
  2. 在Qt调用OpenCV库编写GUI程序
  3. 中国计算机学会CCF推荐国际学术会议和期刊目录-交叉/综合/新兴
  4. 程序员面试题精选100题(52)-C++面试题(1)
  5. 深度学习(十三)caffe之训练数据格式
  6. 2015 SegmentFault 黑客马拉松记录
  7. 《云计算》学习笔记2——Google的云计算原理与应用(GFS和MapReduce)
  8. 【OpenCV3】透视变换——cv::getPerspectiveTransform()与cv::warpPerspective()详解
  9. tornado异步请求非阻塞
  10. 0 开发的准备工作一一虚拟机virturalbox