一、shell基本概述


老男孩教育-shell编程-day07.pdf

1.shell介绍

shell是一个命令解释器,主要用于接收用户指令,进入驱动操作系统,或硬件
image.png

image.png

shell存在交互式和非交互式
①交互式: 登录linux系统,useradd,passwd
②非交互式: 创建100个文件命令 写入一个文件中,然后执行他(不用参与) 一会看到的传参方式设定密码就是非交互式

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,将用户输入的命令翻译给操作系统,并将处理的结果输出至屏幕。

  1. 当然hell 令是存在交互式、非交互式两种方式。why?
  2. 其实是我们日常使用最多的一种模式、登录终端、执行命令、返回结果。再次输入命令、然后等待结果。最后结束工作退出Shell会话。当退出Shell会话后,当前的shell话也就终止了。
  3. 那什么又是shell非交互式: 在这种模式下, shell 不与你进行交互, 而是直接读取某个文件进行执行。那文件中都有什么,“其实就是一堆的命令”。当该文件丛头执行到尾,结束后,当前hell也终止了
  4. 2.什么是shell即本
  5. *1)将系统命令堆积在一起,顺序执行简称系统命令堆积.
  6. *2)特定的格式+特定的语法+系统的命令二文件.
  7. Ps shell命令执行时会开启一个子窗口bash,执行完就销毁,不会影响到当前用户的bash窗口

2.什么是shell脚本

1) 将系统命令堆积在?起,顺序执?(简称: 系统命令堆积)
2) 特定的格式 + 特定的语法 + 系统的命令 = ?件( Shell脚本?件)。
clipboard.png

3.学习Shell预备知识

1.熟练使⽤vim编辑器 ()
2.熟练使⽤系统基础命令 ( useradd、w、awk、….)
3.熟悉Linux、grep、awk、sed
注意:命令不熟、基本的服务连⼿动搭建都有困难,⼀定学不会Shell。

如何学习Shell脚本
1.基础命令+基础服务+练习题+ ( 思路!!! )
2.能看懂—>照抄着写—>能修改—>能编写—>能优化脚本
思路——> 框架——> 优化

*4.Shell书写⽅式
1.Shell脚本名称必须要有含义 a.sh、b.sh、建议命名的⽅式最好在30个字节以内解决。check_memory.sh
2.shell脚本的格式 (建议在⽂件的⾸⾏添加 #!/bin/bash、#!/usr/bin/bash ,自动生成的格式 配置——->>/etc/vimrc)
3.shell脚本建议添加⼀些个注释

5.Shell执⾏⽅式
添加 #!/bin/bash 的作⽤。

1.不添加
默认 ./运⾏时,系统会调bash来运⾏该脚本。
缺点:如果我写的是python脚本,直接调⽤bash来运⾏则会报错。

2.添加           
./运⾏脚本,默认会读取该⽂件第⼀⾏,来确定使⽤什么解释器运⾏。 (必须要有执行权限)


3.直接调⽤解释器运⾏ ( ⽆需在意⽂件⾸⾏指定的解释器 )
python check_shell.sh
bash check_shell.sh #⽇常使⽤最多( 我确定他是⼀个shell脚本,所以我会选
择直接使⽤bash解释器翻译该脚本⽂件 )

**

二, shell编程学习大纲


一、shell基本概述
二、shell自定义variables
三、shell运算符 expr bc
四、shell流程控制 if case
五、shell 循环语句 for while
六、shell 数组函数 array function
七、shell内置命令 break continue exit
**

1. shell编程预备

shell能做什么

1,基础配置:  yum源 ssh优化  软件包  创建用户  内核参数           { shell    |  ansible }
2.配置变更:  Nginx PHP Tomcat MysQL                             { shell    |  ansible }
3.部署代码:  Gitlab  Jenkins  web集群                           { shell    |  ansible }
4.监控服务:  zabbix-server  zabbix-agent                        { shell    |  ansible }
5·日志分析:  pv uv ip {awk}  elkstack                           { shell    |  ansible }

6. 自动扩容:   监控系统+    弹性伸缩服务(免费)                { shell  | python  }
7. 自动缩容:
8. 日常备份:   shell

三: shell脚本应用:

3.1 弹性扩容 底层实现原理

弹性伸缩服务脚本 auto.png

云产品展示:

Snipaste_2020-12-02_23-44-19.png

弹性扩容图解:

Snipaste_2020-12-02_23-44-25.png

3.2 CDN加速 shell应用

cdns加速脚本.png

四、shell编程-综合练习

    1.网站监测脚本{xxx}

  2.使用shell脚本实现跳板机的功能

  3.使用shell脚本实现nginx的多版本安装,必须真的实现
        1.nginx 1.18版本
        2.nginx 1.19版本

        在选择1.18时,需要清理环境,确保完整能安装.
        在选择1.19时,需要清理环境,确保完整能安装.

    4.根据业务需求,现要求开发一个货币兑换的服务系统,具体要求如下:   ( Shell的普通数组 )
        (1)实现人民币兑换美元的功能 
        (2)实现美元兑换人民币的功能 
        (3)实现人民币兑换欧元的功能 
        货币兑换利率:1美元 = 7.14人民币、1元=0.12欧元


    5.使用awk统计Nginx日志 TOP10的IP访问次数

    6.使用awk统计当前TCP状态的次数  (netstat -an | awk '{print $NF}' )  <---state 这一列

  7.使用shell脚本完成 mysql备份 , 需要每天凌晨 04:00 运行.
        0.只能管理员执行
        1.加锁
        2.判断文件备份成功或失败
        3.定时运行.
    8.使用Shell编写同步脚本 Rsync

  9.使用Shell脚本编写 Sersync 的服务启停脚本   [ start | stop | restart | status (pid) ]

  10.使用shell脚本编写批量创建用户, 批量删除用户  [ add | del ]
        1.使用函数
            add
            del
        3.用户如果存在不允许创建,也不允许重置密码
        4.仅root能执行,执行过程还需要加锁.

3-使用shell脚本实现nginx的多版本安装,必须真的实现

nginx_install.sh

#!/bin/bash
. ./nginx_install.sh
meminfo () {
cat<<-EOF
   ------------------------
  | 1) 安装nginx 1.18版本  |
  | ---------------------- |
  | 2) 安装nginx 1.19版本  |
  | ---------------------- |
  | 3) 打印菜单            |
  | -----------------------|
  | 4) 登出                |
   ------------------------
EOF
}
meminfo
trap "" HUP INT QUIT TSTP  

    while true
    do
      read -p "请输入你要执行的操作 " Num
      case $Num in
      1)
       if [ ! $Num =~ ^[0-9]+$ ];then
       continue
       fi
       nginx_depend_pakeages
       download_1_18_5_nginx
       install_nginx_pakeage
       nginx_status
      ;;
      2)
       if [ ! $Num =~ ^[0-9]+$];then
       continue
       fi
       nginx_depend_pakeages
       download_1_19_5_nginx
       install_nginx_pakeage
       nginx_status
      ;;
      3)
       clear
       meminfo
      ;;
      4)
        break
      esac
    done


4-根据业务需求,现要求开发一个货币兑换的服务系统,具体要求如下: (1)实现人民币兑换美元的功能 (2)实现美元兑换人民币的功能 (3)实现人民币兑换欧元的功能 货币兑换利率:1美元 = 7.14人民币、1元=0.12欧元

shell 脚本概述 - 图8

#!/usr/bin/bash
your_money=100
service_menu=(人民币转换美元 美元转换人民币 人明币转换欧元)

echo "******欢迎使用货币转换服务系统*******"
for service in ${!service_menu[@]}
do
  if [ $service -eq 0 ];then
    echo "=============================="
          echo "1.欢迎使用 ${service_menu[service]}  服务"
          echo "您需要转换的人民币为:$your_money 元"
          new_money=$(awk -v your_money=$your_money 'BEGIN{printf "%.2f\n",your_money/7.14}')
          echo "兑换成美元为: ${new_money}$"
          echo "=============================="
  elif [ $service -eq 1 ];then
                echo "=============================="
                echo "2.欢迎使用 ${service_menu[service]}  服务"
                echo "您需要转换的美元为:$your_money 元"
                new_money=$(($your_money * 7 ))
                echo "兑换成人名币为: ${new_money}元"
                echo "=============================="
  elif [ $service -eq 2 ];then
                echo "=============================="
                echo "3.欢迎使用 ${service_menu[service]}  服务"
                echo "您需要转换的人民币为:$your_money 元"
    new_money=$(awk -v your_money=$your_money 'BEGIN{printf "%.2f\n",your_money*0.12}')
                echo "兑换成欧元为: ${new_money}$"
                echo "=============================="
  fi
done

10-使用shell脚本编写批量创建用户, 批量删除用户 [ add | del ]