Day02:Linux进阶(二)

                                                            优秀是一种习惯

    • 知识点01:回顾
    • 知识点02:目标
    • 知识点03:VI编辑器及远程编辑工具
    • 知识点04:Linux网络配置及虚拟机网络管理
    • 知识点05:远程文件交互
    • 知识点06:Linux软件安装:安装方式
    • 知识点07:Linux软件安装:MySQL安装
    • 知识点08:Linux软件安装:JDK安装
    • 知识点08:文本处理:cut
    • 知识点09:文本处理:wc、du
    • 知识点10:文本处理:awk
    • 知识点11:Shell脚本:功能及开发规则
    • 知识点12:Shell脚本:变量类型与使用
    • 知识点13:Shell脚本:字符串定义及处理
    • 知识点14:Shell脚本:数值运算
    • 知识点15:Shell脚本:判断
    • 知识点16:Shell脚本:循环与控制
    • 知识点17:Shell脚本:函数
    • 知识点18:Shell脚本:数组
    • 知识点19:Shell脚本:select
    • 知识点20:Shell脚本:运行方式及嵌套运行

知识点01:回顾

  1. Linux文件系统是什么样的结构?

    • 树形结构
    • 第一层:/
      • 第二层
        • etc:配置文件的目录
        • bin:普通命令
        • sbin:管理命令
        • var:存放日志目录
        • lib:依赖库的目录
        • usr:用于安装软件的
        • root:管理员家目录
        • home:所有普通用户的家目录的父目录
        • tmp:临时目录
  2. Linux中的命令是如何使用的?

    命令	[-选项]  参数
    
  3. 如何实现对Linux中文件的列举、切换、创建及删除?

    • 列举:ls [alhd] 目录

    • 切换:cd 目录

    • 创建

      • touch file1 file2……
      • mkdir [-p] 目录
    • 删除

      • rm -rf
  4. 如何实现对Linux中文件的复制、剪切、压缩及打包?

    • 复制:cp [-r] source target

    • 剪切:mv source target

    • 压缩

      • zip,unzip
      • gzip,gunzip
      • bzip2,bunzip2
    • 打包

      • tar -zcvf :打包并以gzip压缩

      • tar -zxvf : 解压并解包

  5. Linux中的基本权限有几种?如何实现修改权限?

    • 基本权限

      • 可读:r 4
      • 可写:w 2
      • 可执行:x 1
    • 修改权限

      • chmod a-r,u+x 文件或者目录

      • chmod 777 文件或者目录

  6. Linux中怎么查看、关闭进程?

    • 查看:ps -ef , jps

    • 关闭

      • kill -9 pid:关闭后台进程

      • Ctrl +c :终止前端进程

  7. Linux中怎么管理服务的启动、关闭、重启以及设置开启自启动?

    systemctl	start|stop|restart|status|enable|disable  服务名称
    
  8. Linux有哪些常见符号命令及其功能?

    • |:管道,实现数据传递

      ps -ef | grep  ssh
      
    • ~:当前用户的家目录

      >:输出重定向命令,覆盖
      >>:输出重定向命令,追加
      `:执行符号
      .:当前目录
      ..:上一级目录
      \:命令的换行符
      

知识点02:目标

  1. 文本编辑:vim
  2. 网络配置
  3. Linux中软件的安装 【重要】
    • Linux中文件的交互:怎么将文件放到Linux上?
    • 软件的安装方式
    • MySQL:使用yum安装
    • JDK:解压安装
  4. 文本处理的命令【了解】
    • cut、wc、du、awk
  5. Shell 脚本【重点】
    • 将一堆命令塞到一个文件中一起运行

知识点03:VI编辑器及远程编辑工具

  • 目标掌握Linux中vi编辑器的使用及notepad的使用
    • Linux中如何实现文本编辑?
    • vi/vim命令如何使用?
    • notepad如何使用?
  • 路径
    • step1:Linux中文本编辑的两种方式
    • step2:vi/vim命令的使用
    • step3:远程编辑工具notepad的使用
  • 实施
    • Linux中文本编辑的两种方式

      • 命令:vi/vim
        • 优点:方便快捷,支持各种快捷操作
        • 缺点:不适合复杂大数据量的数据操作
        • 应用:小的轻量级的修改
      • 工具:notepad等远程文本编辑工具来实现
        • 优点:功能更加强大,交互性更好
        • 缺点:轻量级的修改有点繁琐
        • 应用:大的变化修改
    • vi/vim命令的使用

      • 语法:vim 文件

      • 命令模式

        • 进入:vim直接进入或者在其他模式下按esc
        • 功能:用于实现一些快捷的操作
        • 命令
          • yy:复制当前行
            • Nyy:复制从当前行开始的N行
          • p:粘贴剪贴板的内容
          • dd:剪切
            • Ndd
          • G:跳转最后一行
          • gg:跳转到第一行
          • Ngg:跳转到第N行
          • i:进入编辑模式
          • A:行尾插入
          • O:上一行插入
          • o:下一行插入
          • u:撤销上一步操作
      • 编辑模式

        • 进入:在命令模式中执行编辑的命令、
        • 功能:实现数据的增删改
      • 末行模式

        • 进入:在命令模式下按冒号

        • 功能:一般用于实现文件的保存等

        • 命令

          • q:退出

          • w:保存

          • wq:保存退出

          • !:强制的

          • x:保存退出,不能写大写的X

          • 替换

            n,ms/你要替换谁/替换成什么/g
            
    • 远程编辑工具notepad的使用

      • 如果要实现复杂的文本的编辑,用远程编辑工具更加方便

      • notepad:安装插件来实现:NPP

      Day02:Linux进阶(二)_第1张图片

      • 安装插件

        • 在线安装

Day02:Linux进阶(二)_第2张图片

  - 离线安装

    - step1:离线下载插件Npp

Day02:Linux进阶(二)_第3张图片

  • step2:notepad中加载这个插件
    Day02:Linux进阶(二)_第4张图片
    Day02:Linux进阶(二)_第5张图片
    Day02:Linux进阶(二)_第6张图片
    Day02:Linux进阶(二)_第7张图片

Day02:Linux进阶(二)_第8张图片

  • 小结
    • Linux中如何实现文本编辑?
      • 命令:轻量级的修改
      • 工具:复杂的数据修改
    • vi/vim命令如何使用?
      • 命令模式:实现快捷命令
      • 编辑模式:数据修改
      • 末行模式:保存和退出的
    • notepad如何使用?
      • step1:通过插件配置远程连接
      • step2:下载、编辑、保存即可

知识点04:Linux网络配置及虚拟机网络管理

  • 目标:掌握Linux系统中网络配置及VM中虚拟机网络的配置

    • Linux中如何修改网络信息?
    • Linux中如何管理防火墙?
    • 如果VM中的虚拟机连不上网或者突然连不上怎么办?
  • 路径

    • step1:Linux中网卡配置管理
    • step2:防火墙管理
    • step3:VM虚拟机常见问题
  • 实施

    • Linux中网卡配置管理

      • 查看网络信息

        ifconfig
        
      • 查看网络配置

        more /etc/sysconfig/network-scripts/ifcfg-ens33 
        
      • 修改网络配置

        vim /etc/sysconfig/network-scripts/ifcfg-ens33
        
      • 修改网络地址获取方式为静态

        #修改第4行
        BOOTPROTO="static"
        
      • 添加静态网络配置信息

        #文件末尾添加以下内容
        IPADDR="192.168.88.130"
        GATEWAY="192.168.88.2"
        NETMASK="255.255.255.0"
        DNS1="8.8.8.8"
        DNS2="114.114.114.114"
        IPV6_PRIVACY="no"
        
      • 重启网络配置

        systemctl restart network
        
    • 防火墙管理

      • 大数据平台中一般不开启防火墙

      • 工作中:如果使用,需要让运维配置各种访问规则

      • 因为大数据集群时内网集群,不对外连接,可以不开防火墙

      • 关闭防火墙并设置开机禁止启动

        systemctl stop firewalld.service
        systemctl disable  firewalld.service
        
    • VM虚拟机常见问题

      • 连不上外网?

        • 现象:ping百度ping不通,CRT能连上

        • 原因以及解决

          • 检查网关与VM的配置是否一致

          Day02:Linux进阶(二)_第9张图片
          Day02:Linux进阶(二)_第10张图片

        • UnKnown Host:DNS异常,检查DNS即可

      • 突然远程连接不上?

        • 现象:本来好好的,突然CRT连不上

        • 解决

          • 先检查Linux的网卡是否正常:ifconfig

          • 如果网卡正常:建议检查Windows的虚拟网卡是否为网段.1

          Day02:Linux进阶(二)_第11张图片

          • 如果上一步也正常,检查VM的服务是否正常启动

            Day02:Linux进阶(二)_第12张图片

      • Linux网卡突然消失?

        • 服务管理冲突
          • network:默认管理服务
          • NetworkManager:网卡管理服务
          • 启动时候加载同一个配置冲突
        • 解决
          • 关闭NetworkManager,并禁止开机自启
  • 小结

    • Linux中如何修改网络信息?
      • 修改配置文件
        • 设置静态地址
        • 设置地址信息:IP、NetMask、Gateway、DNS
    • Linux中如何管理防火墙?
      • 大数据集群关闭防火墙
    • 如果VM中的虚拟机连不上网或者突然连不上怎么办?
      • 参考解决方案解决即可

知识点05:远程文件交互

  • 目标掌握Linux中的远程文件交互的实现

    • 怎么将本地文件上传到Linux文件系统中?
  • 路径

    • step1:远程文件交互场景
    • step2:远程交互工具
    • step3:远程文件交互命令
  • 实施

    • 远程文件交互场景

      • 经常需要在Linux中安装软件
      • 需要将下载好的软件放到Linux集群中
    • 远程交互工具

      • XFTP
      • SecureFX
      • FileZila
      • ……

      Day02:Linux进阶(二)_第13张图片

    • 远程文件交互命令

      • 通过rz来实现

      • 安装lrzsz工具,使用命令上传

        yum install -y lrzsz
        

Day02:Linux进阶(二)_第14张图片

- 上传

  ```
  rz
  ```

Day02:Linux进阶(二)_第15张图片

  • 小结

    • 怎么将本地文件上传到Linux文件系统中?
      • 方式一:远程工具连接,实现拖拽
      • 方式二:通过工具命令,rz

知识点06:Linux软件安装:安装方式

  • 目标了解Linux中软件安装的四种方式

    • 如何在Linux中实现软件的安装?
  • 路径

    • step1:RPM包安装
    • step2:YUM安装
    • step3:编译安装
    • step4:免安装
  • 实施

    • RPM包安装

      • 类似于Windows上.exe文件的安装,运行文件,自动安装

      • 文件的格式:xxxx.rpm

      • 命令

        #安装
        rpm -ivh  文件路径/包的名称.rpm
        #卸载,--nodeps,强制不考虑依赖的卸载
        rpm -e  [--nodeps]  包的名称
        #查询
        rpm -qa | grep MySQL
        
      • 缺点:安装的时候必须先安装依赖,才能安装这个软件

        • 类似于:要装MySQL,先装VC++,装.Net,才能装MySQL
    • YUM安装

      • 类似于Java中的Maven的仓库管理方式

      • 将所有软件以及对应的依赖都放在公共仓库中

      • 通过yum安装软件时,自动根据依赖关系,下载依赖并且按照顺序进行自动安装

      • 命令

        #安装
        yum install -y 包的名称
        #卸载
        yum remove -y  包的名称
        #查询
        yum  list installed
        
      • 注意

        • 必须配置Yum仓库

        • 配置文件

Day02:Linux进阶(二)_第16张图片

  - 运维会配置局域网YUM源
  • 编译安装

    • 直接拿源码在Linux中编译后进行安装
    • Java:Maven
    • C/C+:GC++
      • step1:预编译:./configure
      • step2:编译:make
      • step3:安装:make install
  • 免安装

    • 用的最多的方式:下载解压就相当于安装了
  • 小结

    • Linux中软件安装的四种方式分别是?
      • RPM包
      • YUM安装
      • 源码编译
      • 免安装

知识点07:Linux软件安装:MySQL安装

  • 目标实现Linux系统中MySQL的安装部署

  • 路径

    • step1:配置YUM依赖
    • step2:在线安装MySQL
    • step3:启动测试配置
  • 实施

    • 配置YUM源

      • 下载MySQL的yum源

        wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 
        
      • 安装yum源

        rpm -ivh mysql80-community-release-el7-1.noarch.rpm 
        

Day02:Linux进阶(二)_第17张图片

- 修改yum源

  ```
  cd /etc/yum.repos.d/
  vim mysql-community.repo 
  ```

  ```shell
  #修改第13行,更改为1,表示启用MySQL5.6
  enabled=1
  #修改第28行,更改为0,表示禁用MySQL8
  enabled=0
  ```
  • 安装MySQL

    • 安装MySQL

      yum -y install mysql-community-client mysql-community-server mysql-community-devel
      

Day02:Linux进阶(二)_第18张图片

- 启动MySQL服务

  ```
  systemctl start mysqld.service
  systemctl enable mysqld.service
  ```

- 查看状态

  ```
  systemctl status mysqld.service
  ```
  • 登陆测试配置

    • 登录

      mysql -uroot
      
    • 重置MySQL管理员用户密码

      set password = password('123456');
      

Day02:Linux进阶(二)_第19张图片

- 授权

  ```sql
  #允许root用户从任何一台机器通过123456密码登录访问任何一个数据库中的任何 一张表,拥有所有权限
  grant all privileges on *.* to 'root'@'%' identified by '123456'; 
  delete from mysql.user where host != '%';
flush privileges; 
  ```

Day02:Linux进阶(二)_第20张图片

- 退出重新登录
    exit;
      mysql -uroot -p
      123456
  • 使用远程终端Navicat工具连接

Day02:Linux进阶(二)_第21张图片

  • 小结

    • 按照步骤一步步实现即可

知识点08:Linux软件安装:JDK安装

  • 目标实现Linux中JDK的安装

  • 路径

    • step1:创建安装目录

    • step2:上传解压安装

    • step3:配置环境变量

  • 实施

    • 创建安装目录

      #用于存放软件的安装包
      mkdir -p /export/software
      #用于存放安装的目录
      mkdir -p /export/server
      #用于存放临时测试的数据
      mkdir -p /export/datas
      
    • 上传解压安装

      cd /export/software/
      rz
      tar -zxvf jdk-8u241-linux-x64.tar.gz -C /export/servers/
      
    • 配置环境变量

      • Linux中全局环境变量的配置文件:/etc/profile

      • 配置环境变量

      vim /etc/profile
      #在文件最后添加以下内容
      #JAVA_HOME
      export JAVA_HOME=/export/servers/jdk1.8.0_241
      export PATH=:$PATH:$JAVA_HOME/bin
  • 刷新环境变量
    source /etc/profile
  • 测试
      java -version
      jps

Day02:Linux进阶(二)_第22张图片

  • 小结

    • 按照步骤一步步实现即可

知识点08:文本处理:cut

  • 目标了解文本处理命令cut的使用

  • 路径

    • step1:cut的功能及语法
    • step2:cut实现列裁剪测试
  • 实施

    • cut的功能及语法

      • 功能:用于实现结构化数据中列的处理,从文件中筛选列的数据

      • 语法

        cut [-dfc] 文件
        
        • d:指定列的分隔符
        • f:指定获取对应的列
        • c:指定获取对应的字符
    • cut实现列裁剪测试

      • 创建文件

        cd /export/data/
        mkdir test
        cd test
        vim stu.txt
        
        id name age score
        01 tom 18 78
        02 jack 20 85
        03 bill 16 90
        04 mary 24 77
        05 anna 21 85
        
  • 截取文件中的第1列

    cut -d " " -f 1 stu.txt
  • 截取文件中的第1和第3列
    cut -d " " -f 1,3 stu.txt
  • 截取文件中的第1到第3列
      cut -d " " -f 1-3 stu.txt
  • 截取文件中的第2列以后的内容
      cut -d " " -f 2- stu.txt
  • 截取文件中的第4列之前的内容
      cut -d " " -f -3 stu.txt
  • 截取文件中的前5个字符
      cut -c 1-5 stu.txt
  • 小结

    • cut的功能与语法是什么?
      • 功能:对数据文件中列的截取
      • 语法:cut [-dfc] 文件

知识点09:文本处理:wc、du

  • 目标了解文本处理命令wc与du命令的功能与用法

  • 路径

    • step1:wc的功能与用法
    • step2:du的功能与用法
  • 实施

    • wc的功能与用法

      • 功能:统计文本中字符、单词、行的个数

      • 语法

        wc [-cwl]  文件
        
      • 测试

        [root@node1 test]# wc stu.txt 
         6 24 87 stu.txt
        [root@node1 test]# wc -c stu.txt 
        87 stu.txt
        [root@node1 test]# wc -w stu.txt  
        24 stu.txt
        [root@node1 test]# wc -l stu.txt  
        6 stu.txt
        [root@node1 test]# 
        
    • du的功能与用法

      • 功能:用于统计文件大小

      • 语法

        du [-sh]  目录或者文件
        
        • h:人性化的显示单位
        • s:汇总显示,不显示子文件的大小
      • 测试

    Day02:Linux进阶(二)_第23张图片

  • 小结

    • wc的功能与语法是什么?
      • 功能:获取文件中的字符、单词和行数
      • 语法:wc [-cwl] 文件即可
    • du的功能与语法是什么?
      • 功能:统计文件或者目录大小
      • 语法:du [-sh] 文件

知识点10:文本处理:awk

  • 参考课件了解即可
  • Linux中最常用的两个功能非常强大的命令:sed与awk

知识点11:Shell脚本:功能及开发规则

  • 目标:掌握shell脚本的功能及开发规则
    • 为什么要开发Shell脚本?
    • 如何开发一个Shell脚本?
  • 路径
    • step1:Shell脚本的功能与应用场景
    • step2:Shell脚本的开发规则
    • step3:Shell脚本测试
  • 实施
    • Shell脚本的功能与应用场景

      • 功能
        • 批量化处理
        • 自动化处理
      • 应用
        • 创建100个个目录,dir001 ~ dir100
        • 每天希望Linux自动实现一些操作
    • Shell脚本的开发规则

      • 什么是shell?

        • 介于用户和内核之间,将用户的命令翻译给内核听的
        • 叫做解释器:Linux中有多种不同的解释器
        • 默认:bash shell
      • 开发规则

        • step1:必须在脚本文件的头部声明解释器类型

          #!/bin/bash
          
        • step2:在脚本文件中写Linux命令以及其他语法

        • step3:脚本必须拥有执行权限,才可以被运行

          chmod u+x 脚本文件
          
    • Shell脚本测试

      • 开发一个脚本,打印当前路径并列举根路径下面的内容

        mkdir /export/data/shell
        cd /export/data/shell
        
        #!/bin/bash
        
        #print work dir
        pwd
        
        #list the root path
        ls  /  
        

Day02:Linux进阶(二)_第24张图片

  • 开发一个脚本,输出昨天的日期
      #!/bin/bash
      
      #get yesterday
      yesterday=`date -d '-1 day' +%Y-%m-%d`
      
      
      #print yesterday
      echo "${yesterday}"

Day02:Linux进阶(二)_第25张图片

  • 小结
    • 为什么要开发Shell脚本?
      • 批量化命令处理
      • 自动化处理
    • 如何开发一个Shell脚本?
      • step1:声明解释器的类型
      • step2:写入命令即可
      • step3:赋予执行权限执行即可

知识点12:Shell脚本:变量类型与使用

  • 目标掌握Shell脚本中的变量类型与使用

    • Shell脚本中的变量有哪几种以及如何使用?
  • 路径

    • step1:系统变量
    • step2:内置变量
    • step3:用户变量
    • step4:变量使用
  • 实施

    • 系统变量

      • 一般都是大写的
      • 查看系统变量:env
      • PATH:Linux系统的全局环境变量
      • PWD:当前所在的位置
      • USER:当前的用户
    • 内置变量

      • 脚本默认提供的几个变量

      • $0:表示当前脚本的名称

      • $1 ~ $9:脚本第1个参数到第9个参数

      • $# :脚本传递参数的个数

      • $?:上一条命令执行的结果,0表示上一条命令正确执行成功

      • $*:所有参数值,所有参数是一个整体

      • $@:所有参数值,每个参数是独立的

        #!/bin/bash
        
        echo $0
        echo $1
        echo $2
        echo $9
        echo $#
        echo $?
        echo $*
        echo $@
        

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XHJT0i1-1618744469790)(Day02_20210418_Linux进阶(一).assets/image-20210418151024835.png)]

    • 用户变量

      • 定义:var=value

        [root@node1 shell]# a=1
        [root@node1 shell]# b=2
        [root@node1 shell]# echo $a
        1
        [root@node1 shell]# echo $b
        2
        [root@node1 shell]# 
        
        
      • 注意

        • 没有数据类型之分
        • 赋值时变量名与等号还有值之间不能有空格
    • 变量使用

      • 引用:${var}

        • 标准:${a}
        • 简写:$a
          • 有些场景下,简写会出现问题,与特殊符号放在一起用的时候
      • 只读:readonly

        [root@node1 shell]# re=6
        [root@node1 shell]# echo $re
        6
        [root@node1 shell]# re=8
        [root@node1 shell]# echo $re
        8
        [root@node1 shell]# readonly re
        [root@node1 shell]# echo $re   
        8
        [root@node1 shell]# re=10
        -bash: re: 只读变量
        [root@node1 shell]# 
        
      • 删除:unset

        [root@node1 shell]# c=9
        [root@node1 shell]# echo $c
        9
        [root@node1 shell]# unset c
        [root@node1 shell]# echo $c
        
        [root@node1 shell]# 
        
  • 小结

    • Shell脚本中的变量有哪几种以及如何使用?

      • 分类
      • 系统变量:一般大写,PATH、PWD、USER
        • 内置变量:$0,$1 ~ 9 , 9 , 9,# , ? , ? , ?,*,$@
        • 用户变量:key=value
      • 使用
        • 引用:${变量名}
        • 只读:readonly 变量名
        • 删除:unset 变量名

知识点13:Shell脚本:字符串定义及处理

  • 目标掌握Shell中字符串的处理

    • shell中的字符串如何实现定义、截取、拼接、统计长度?
  • 路径

    • step1:Shell中字符串的定义
    • step2:Shell中字符串的处理
  • 实施

    • Shell中字符串的定义

      • 定义:变量名=“字符串内容”

        [root@node1 shell]# str1=I
        [root@node1 shell]# str2=Like
        [root@node1 shell]# echo ${str1}
        I
        [root@node1 shell]# str3="I Like"
        [root@node1 shell]# echo ${str3} 
        I Like
        [root@node1 shell]# 
        
    • Shell中字符串的处理

      • 截取:${变量名:N:M}

        [root@node1 shell]# echo ${str3:3:2}
        ik
        
        • N:从哪一位开始截取的下标,下标从0开始

        • M:截取的长度

      • 拼接:直接使用双引号拼接

        [root@node1 shell]# echo "${str3} itcast"
        I Like itcast
        [root@node1 shell]# str4="${str3} itcast"     
        [root@node1 shell]# echo ${str4}
        I Like itcast
        
      • 长度:${#变量名}

        [root@node1 shell]# echo ${#str1}
        1
        [root@node1 shell]# echo ${#str2}
        4
        [root@node1 shell]# 
        
  • 小结

    • shell中的字符串如何实现定义、截取、拼接、统计长度?
      • 定义:变量名=“内容”
      • 截取:${变量名:N:M}
      • 拼接:使用双引号拼接即可
      • 长度:${#变量名}

知识点14:Shell脚本:数值运算

  • 目标掌握Shell中数值的运算

    • 如何在shell中对两个数值变量进行计算?
  • 路径

    • step1:计算命令expr
    • step2:计算表达式
  • 实施

    • 计算命令expr

      [root@node1 shell]# expr $a + $b
      3
      
      • 运算符两边必须有空格
    • 计算表达式

      • 中括号

        [root@node1 shell]# echo $[ a + b ]
        3
        [root@node1 shell]# echo $[ $a + $b ]
        3
        
        • 规则:中括号中间的内容与中括号之间要留有空格
      • 圆括号

        [root@node1 shell]# echo $((a+b))
        3
        [root@node1 shell]# echo $(($a+$b))
        3
        [root@node1 shell]# 
        
        • 语法:双圆括号
  • 小结

    • 如何在shell中对两个数值变量进行计算?
      • 方式一:命令实现
        • expr v1 op v2
      • 方式二:表达式实现
        • 中括号
        • 双圆括号

知识点15:Shell脚本:判断

  • 目标掌握Shell中判断语句的使用

    • Shell中如何实现条件判断?
  • 路径

    • step1:条件判断if
    • step2:条件判断case
  • 实施

    • 条件判断if

      • 语法

        • 方式一:单条件单结果

          if [ 条件 ]
          then
          	满足条件怎么处理
          fi
          
        • 方式二:单条件双结果

          if [ 条件 ]
          then
          	满足条件怎么处理
          else
          	不满足条件怎么处理
          fi
          
        • 方式三:多条件多结果

          if [  条件1 ]
          then
          	满足条件1怎么 处理
          elif [ 条件2 ]
          then
          	满足条件2怎么处理
          ……
          else
          	都不满足怎么处理
          fi
          
      • 判断条件表达式

        • 文件

          • -e:用于判断这个文件是否存在

          • -f:用于判断这是否是个文件

          • -d:用于判断这是否是个目录

          • -w:用于判断是否有可写权限

          • -r:用于判断是否有可读权限

        • 数值

          • -eq:等于

          • -ne:不等于

          • -gt:大于

          • -lt:小于

          • -ge:大于等于

          • -le:小于等于

        • 字符串

          • =:相等
          • != :不相等
          • -n:not null,不为空
          • -z:zero,为空
      • 测试

        • 判断/etc/passwd文件是否存在

          #!/bin/bash
          
          if [ -e /etc/passwd ]
          then
          	echo "exists"
          else
          	echo "not exists"
          fi
          
        • 判断/etc/passwd是否是一个文件

        • 判断一个目录是否存在,如果不存在,就创建

          #!/bin/bash
          
          if [ -e $1 ]
          then
          	echo "exists"
          else
          	#不存在就创建
          	mkdir $1
          fi
          
          
        • 判断两个数字是否相等

        • 判断两个数字大小,得到比较的结果

          #!/bin/bash
          
          read -p "请输入第一个数字:" a
          read -p "请输入第二个数字:" b
          
          if [ $a -eq $b ] 
          then
          	echo "a=b"
          elif [ $a -gt $b ]
          then
          	echo "a>b"
          else
          	echo "a
          fi
          
          • read:用于读取用户的输入,-p表示提示语句
        • 判断输入参数的个数

          #!/bin/bash
          
          if [ $# -eq 2 ]
          then
          	echo "bingo"
          else
          	echo "参数个数不合法,请给定两个参数"
          	#强制退出
          	exit 100
          fi
          
          echo "这是一条测试语句"
          
          • exit:表示终止当前程序
          • 100:随便给定一个数值做标记,标记错误发生的位置
        • 判断字符串是否相等

        • 判断是否为空

          #!/bin/bash
          
          if [ -n "$1" ]
          then
          	echo "第一个参数的值:$1"
          else
          	echo "没有第一个参数"
          fi
          
          • 如果要判断是否为空,对于变量需要使用引号包裹
        • 多条件判断:并且:&& / -a

          #参数个数必须为2,而且第一个参数的值必须为itcast
          if [ $# -eq 2 ] && [ $1 = "itcast" ] 
          then
          	echo "参数个数没问题,你很优秀"
          else
          	echo "参数个数不正确或者第一个参数值不正确,请重新执行"
          fi
          
          #参数个数必须为2,而且第一个参数的值必须为itcast
          if [ $# -eq 2 -a $1 = "itcast" ] 
          then
          	echo "参数个数没问题,你很优秀"
          else
          	echo "参数个数不正确或者第一个参数值不正确,请重新执行"
          fi
          
        • 多条件判断:或者:|| / -o

          #参数个数为2个,或者第一个参数的值为itcast
          if [ $# -eq 2 -o $1 = "itcast" ] 
          then
          	echo "参数个数没问题,你很优秀"
          else
          	echo "参数个数不正确或者第一个参数值不正确,请重新执行"
          fi
          
          #参数个数为2个,或者第一个参数的值为itcast
          if [ $# -eq 2 ] || [ $1 = "itcast" ] 
          then
          	echo "参数个数没问题,你很优秀"
          else
          	echo "参数个数不正确或者第一个参数值不正确,请重新执行"
          fi
          
    • 值判断case

      • 语法

        case  value  in
        v1)
        	等于v1,执行的语句
        	;;
        v2)
        	等于v2,执行的语句
        	;;
        ……
        *)
        	如果都不满足,执行的语句
        	;;
        esac
        
      • 判断输入

        #!/bin/bash
        
        read -p "请输入y或者n:"  input
        
        case $input in
        "y")
        	echo "你的输入是yes"
        	;;
        "n")
        	echo "你的输入是no"
        	;;
        *)
        	echo "你的输入不正确"
        	;;
        esac
        
  • 小结

    • Shell中如何实现条件判断?

      • if

        • 方式一

          if [ 条件 ]
          then
          fi
          
        • 方式二

          if [ 条件 ]
          then
          else
          fi
          
        • 方式三

          if [ 条件1 ]
          then
          elif [条件2]
          ……
          else
          fi
          
      • case

        case 变量 in
        v1)
        	符合v1的操作
        	;;
        v2)
        	符合v2的操作
        	;;
        ……
        *)
        	都不符合的结果
        	;;
        esac
        

知识点16:Shell脚本:循环与控制

  • 目标掌握Shell中循环的语法实现

    • Shell中如何实现循环?
    • Shell中如何控制循环?
  • 路径

    • step1:for循环
    • step2:while循环
    • step3:死循环
    • step4:break与continue
  • 实施

    • for循环

      • 语法

        • 方式一:一般用于迭代取非数值的循环

          for  var in  取值范围
          do
          	每次循环要执行的命令
          done
          
        • 方式二:一般用于取数值,用于对数组迭代

          for((i=0;i<=10;i++))
          do
          	每次循环要执行的命令
          done
          
      • 测试

        • 循环依次从tom jack lily lucys中取值
      #!/bin/bash
        
      for name in tom jack lily lucys
        do
        	echo $name
        done
  • 循环取1到5的每个数值
        #!/bin/bash
        
        for i in 1 2 3 4 5
        do
        	echo $i
        done
        #!/bin/bash
        
        for((i=1;i<=5;i++))
        do
        	echo $i
        done
        #!/bin/bash
        
        for i in {1..5}
        do
        	echo $i
        done
  • 循环取出目录下每个文件的名称
        #!/bin/bash
        
        for i in `ls /export/data/shell/`
        do
        	echo "当前文件的名称为:$i"
        done
  • while循环

    • 语法

      while [ 条件 ]
      do
      	满足条件就执行的命令
      done
      
    • 举个栗子

      #!/bin/bash
      
      i=1
      
      while [ $i -lt 5 ]
      do
      	echo $i
      	i=$((i+1))
      done
      
      #!/bin/bash
      
      i=1
      sum=0
      while [ $i -le $1 ]
      do
      	echo "当前的i = $i,当前的sum = $sum"
      	let sum=sum+$i
      	let i++
      done
      echo $sum
      
  • 死循环

    for((;;))
    do
    	echo "hehe"
    done
    
    while true
    do
    	echo "hehe"
    done
    
    while :
    do
    	echo "hehe"
    done
    
  • break与continue

    • break:跳出整个循环体

      #!/bin/bash
      
      while true
      do
      	read -p "please input yes or no :" input
      
      	if [ $input = "yes" ]
      	then
      		echo "yes"
      		#跳出循环
      		break
      	elif [ $input = "no" ]
      	then
      		echo "no"
      		#跳出循环
      		break
      	else
      		echo "u need think again"
      	fi
      done
      
    • continue:跳出本次循环

      #!/bin/bash
      
      for((i=0;i<10;i++))
      do
      	#判断当前的值是否是5,如果是5,跳过本次继续下一次循环
      	if [ $i -ne 5 ]
      	then
      		echo $i
      	else
      		continue
      	fi
      done
      
  • 小结

    • Shell中如何实现循环?

      • for

        • 方式一

          for  var in 取值范围
          do
          done
          
        • 方式二

          for((i=0;i<10;i++))
          do
          done
          
      • while

        while [条件]
        do
        done
        
    • Shell中如何控制循环?

      • 死循环
        • for((;;))
        • while true
      • 跳出整个循环:break
      • 跳出当前循环:continue

知识点17:Shell脚本:函数

  • 目标了解Shell脚本函数的基本使用

  • 路径

    • step1:函数的定义
    • step2:函数的调用
    • step3:参数的使用
  • 实施

    • 函数的定义

      [function] funName(){
      	你需要执行的命令
      	[return 值]
      }
      
    • 函数的调用

      • 先定义函数,然后通过函数名调用即可
    • 测试

      #!/bin/bash
      
      #先定义函数
      fun_print(){
      	#输出打印
      	echo "这是一个函数"
      }
      
      #调用函数
      fun_print
      
      #!/bin/bash
      
      #先定义函数
      fun_sum(){
      	#输入两个数字,求和
      	read -p "input a : " a
      	read -p "input b : " b
      	echo "a=$a   b=$b"
      	return $((a+b))
      }
      
      #调用函数
      fun_sum
      #打印返回值=打印函数调用的结果
      echo "a+b=$?"
      
    • 参数的使用

      • $n:第n个参数

        • 运行脚本时,作为脚本的输入参数

          ./xxx.sh  $1    $2
          
        • 调用函数时,作为函数的输入参数

          funName   $1   $2
          
        • 区别:作用域不一样

          • 如果出现在函数中,只在函数中有效
      • 测试

        #!/bin/bash
        
        #传递脚本参数
        c=$(($1+1))
        d=$(($2+2))
        
        #先定义函数
        fun_sum(){
        	#输入两个数字,求和
        	a=$1
        	b=$2
        	echo "a=$a   b=$b"
        	return $((a+b))
        }
        
        #调用函数,传递函数参数
        fun_sum $c $d
        #打印返回值=打印函数调用的结果
        echo "a+b=$?"
        
  • 小结

    • 如何定义?

      [function] funName(){
      	函数体
      	return
      }
      
    • 如何调用?

      • 直接函数名调用
    • 如何传参?

      • 如果有参数,参数直接放在后面
      • 函数内部通过$N来引用参数

知识点18:Shell脚本:数组

  • 目标:了解Shell中数组的使用

  • 路径

    • step1:数组的定义及取值
    • step2:测试
  • 实施

    • 数组的定义及取值

      • 定义

        arr_name=(v1 v2 v3…… vN)
        
        • 不需要指定长度或者类型
      • 引用:通过下标引用数组中的数据,下标从0开始

        ${arr_name[index]}
        
    • 测试

      #!/bin/bash
      
      #定义一个数组
      arr1=(1 2 A C "zhangsan")
      
      #赋值
      arr1[0]=3
      
      #打印数组的指定元素
      echo "${arr1[0]}"
      echo "${arr1[4]}"
      echo "${arr1[5]}"
      
      #定义一个数组
      arr1=(1 2 A C "zhangsan")
      
      #打印数组的所有元素
      #echo "${arr1[*]}"
      #echo "${arr1[@]}"
      #for:直接遍历数组
      for i in ${arr1[*]}
      do
      	echo "当前的元素:$i"
      done
      
      #获取数组的长度
      arrlen=${#arr1[*]}
      for((i=0;i<$arrlen;i++))
      do
      	echo "当前的元素:${arr1[$i]}"
      done
      
  • 小结

    • 如何定义?
      • 变量名=(元素1 元素2 元素3……)
    • 如何取值?
      • 变量名[下标]

知识点19:Shell脚本:select

  • 目标了解Shell中select语法的使用

  • 路径

    • step1:select的功能与语法
    • step2:测试
  • 实施

    • select的功能与语法

      • 功能

        • Linux默认提供的死循环,使用时,必须给定break

        • 选择:将整个集合的元素列举出来,让你选择

          • 选择完成以后要break
      • 语法

        select var in 集合
        do
        done
        
    • 测试

    echo "请选择你最喜欢的操作系统:"
    select var in Windows Linux Unix MacOS
    do
    	echo "你的选择是:$var"
    	break
    done
    echo "==============根据你的职业,预测你的未来=============="
    PS3="请选择你的职业:"
    select var in bigdata java python other
    do
    	case $var in
    	"bigdata")
    		echo "你要好好珍惜现在的时光!"
    		;;
    	"java")
    		echo "你要好好保护你的头发!"
    		;;
    	"python")
    		echo "要做好进局子的准备!"
    		;;
    	*)
    		echo "你能长命百岁!"
    		;;
    	esac
    	break
    done
  • PS3:专门用于搭配select使用的变量,用作提示

  • 小结

    • select的功能?

      • 死循环,用于做选项输入循环
    • select的使用?

      • 类似于for的语法

        select var in 选项
        do
        done
        

知识点20:Shell脚本:运行方式及嵌套运行

  • 目标掌握Shell中脚本的运行方式及嵌套运行

    • 脚本如何运行?
    • 如何嵌套脚本?
  • 路径

    • step1:脚本的两种运行方式
    • step2:脚本的嵌套运行
  • 实施

    • 脚本的两种运行方式

      • 方式一:执行文件:一般用于脚本的开发

        ./fortest.sh
        /export/data/shell/fortest.sh
        
        • 必须申明头部
        • 必须有执行权限
      • 方式二:通过命令来执行文件:一般用于脚本的强制运行或者测试

        • sh、bash

          [root@node1 shell]# bash runtest.sh 
          请输入y或者n:yes
          你的输入不正确
          [root@node1 shell]# sh runtest.sh 
          请输入y或者n:y
          你的输入是yes
          [root@node1 shell]# sh -x testShell02.sh 
          ++ date -d '-1 day' +%Y-%m-%d
          + yesterday=2021-04-17
          + echo 2021-04-17
          2021-04-17
          [root@node1 shell]# sh testShell02.sh 
          2021-04-17
          [root@node1 shell]# 
          
    • 脚本的嵌套运行

      • 嵌套方式

        • 方式一

          .  调用的脚本的路径和名称
          
        • 方式二

          source 调用的脚本的路径和名称
          
      • 测试

        • 创建第一个脚本

          vim test01.sh
          
          #!/bin/bash
          arr2=(1 2 A B C)
          
        • 添加可执行权限

          chmod u+x test01.sh 
          
        • 创建第二个脚本

          vim test02.sh
          
          #!/bin/bash
          
          #调用test01.sh
          #source /export/datas/shell/test01.sh
          . /export/datas/shell/test01.sh
          
          #对test01中的变量进行操
          
          for var in ${arr2[*]}
          do
                  echo $var
          done
          
        • 赋予执行权限

          chmod u+x test02.sh
          
  • 小结

    • 脚本如何运行?

      • 方式一:执行文件
        • 声明头部
        • 执行权限
      • 方式二:命令运行
        • sh
        • bash
    • 如何嵌套脚本?

      • 方式一

        . 运行的脚本
        
      • 方式二

        source 运行的脚本
        

你可能感兴趣的:(java,linux,shell,mysql,大数据)