打怪升级之小白的大数据之旅(四十)<Shell编程>

【摘要】 打怪升级之小白的大数据之旅(四十)
Shell编程
上次回顾
上一章对Linux的常用命令进行了总结分享,命令比较多,VIM是必须要首先熟练的,其次就是按照优先级去练习,本章节对Shell编程进行分享,当然了,我只将后面大数据中可能用到的知识点进行分享,Shell编程真的展开来讲,至少得半个月到一个月。。。我们不是运维,不要纠结,只需要关系我在博客里提到过的知识点…

打怪升级之小白的大数据之旅(四十)

Shell编程

上次回顾

上一章对Linux的常用命令进行了总结分享,命令比较多,VIM是必须要首先熟练的,其次就是按照优先级去练习,本章节对Shell编程进行分享,当然了,我只将后面大数据中可能用到的知识点进行分享,Shell编程真的展开来讲,至少得半个月到一个月。。。我们不是运维,不要纠结,只需要关系我在博客里提到过的知识点哈

Shell概述

  • Shell就是一个命令行解释器,就如同我们在Windows中的cmd一样,它用于接收应用程序或者用户的命令,然后再调用操作系统内核
  • 比如我们java刚开始在命令行使用的javac编译与java运行命令,就是通过Windows的命令行解析器调用操作系统内核,然后执行我们的java代码
  • Linux的shell和Windows的Cmd做的事情是一样的,只不过Linux的Shell更加强大
  • 上面说过,Shell是一个命令行解析器,既然是解析器,那么自然就有很多的版本了,在Linux中提供的Shell解析器有:
    # 查看shell的解释器
    cat /etc/shells 
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    /bin/tcsh
    /bin/csh
    
        
       
  • 在我们使用的CentOS中一般默认使用的是bash 解析器,路径是/bin/bash
  • Shell也是一个功能相当强大的编程语言,具有易编写、易调试、灵活性强的特点

Shell脚本入门程序

  • 入门程序是什么?当然就是hello world啦,Shell编写的程序称为Shell脚本
  • 一般我们编写脚本通常使用脚本的后缀名使用 .sh,sh是bash解析器的一个硬链接,我们可以通过bash xxx.sh进行脚本的运行
  • 脚本的格式(我们习惯性的开头指定解析器的脚本)
    #!/bin/bash
    脚本....
    
        
       
  • 第一个脚本程序,首先创建sh文件vim hello.sh
    #!/bin/bash
    echo "hello world"
    
        
       
  • 命令行运行: bash hello.sh在这里插入图片描述
  • 运行脚本的方式还可以直接输入脚本的路径进行运行,但是需要设置可执行的权限,例如我直接 chmod -u+x hello,然后直接输入这个文件的路径就可以运行
  • 使用路径进行脚本运行可以使用相对路径和绝对路径两种方式,我建议使用绝对路径,不过更建议使用bash xx.sh脚本的方式运行

Shell变量

如同java一样,Shell也有变量,只不过它有一点点不同

系统定义的变量

  • 我就介绍几个前面遇到的,一般不怎么使用它们,最多使用set这个变量查看一下当前Shell中所有的变量,具体的大家测试一下就懂了
    $HOME
    $PWD
    $SHELL
    $USER
    $PASH
    set
    
        
       
  • set命令可以查看当前shell中所有的变量,不过通常是通过管道过滤来查看某个变量的值的,下面我介绍完自定义变量后会掩饰set的用法

自定义变量

  • 自定义变量,就跟java自定义定义变量一样,只不过它不需要声明变量的数据类型
  • 基本语法
    (1)定义变量:变量=值 
    (2)撤销变量:unset 变量
    (3)声明静态变量:readonly变量,注意:不能unset
    
        
       
  • 变量定义规则
    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
    (2)等号两侧不能有空格
    (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
    (4)变量的值如果有空格,需要使用双引号或单引号括起来。
    
        
       
  • 注意事项:
    • 当我们使用readonly时,这个变量就无法撤销了…
    • 另外,在shell中,定出来的变量值都是字符串,因此无法做运算,假如我定义了一个变量num=1+1,在输出后,它的值会是字符串的1+1
    • 如果我们定义的变量值有空格,那么我们需要双引号或者单引号包起来
    • 当我们定义变量后,它的作用域只是在当前的目录下,如果想定义全局的变量就需要使用export变量名,这个知识点我们在搭建hadoop服务器的时候会用到
  • 下面进行示例演示,然后演示一下前面提到的set用法,set 通常配合|grep管道符来查看变量的值
    # 自定义一个变量name,值是hello,然后使用set变量查看变量name的值
    name=hello
    set grep|$name
    # 定义变量A
    A=5
    # 给变量A重新赋值
    A=8
    # 撤销变量A
    unset A
    # 声明静态的变量B=2,不能unset\
    readonly B=2
    
        
       

特殊变量

  • 特殊变量的作用是命令行传参,假设我们需要通过用户来自定义参数,就需要下面的特殊变量

$n

  • $n用于接收参数的个数
  • 基本语法
    $n	(功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
       
  • 示例
    # 1. 创建一个sh脚本文件
    vim parameter.sh
    # 2.通过vim进行脚本编写,接收两个参数
    #!/bin/bash
    echo "$0  $1   $2"
    # 运行脚本,向该文件传递参数
    parameter.sh cls  xz
    # 输出的内容
    ./parameter.sh  cls   xz
    
        
       
  • 注意啦,参数是从1开始的,我们定义的0代表的是该脚本文件的名称

$#

  • $#用于统计我们传递参数的个数,通常用于配合循环使用,别急后面会讲到循环
  • 基本语法
    $#	(功能描述:获取所有输入参数个数,常用于循环)
    
        
       
  • 示例
    # 创建脚本文件
    vim parameter.sh
    # 编写脚本文件
    #!/bin/bash
    echo "$0  $1   $2"
    echo $#
    # 运行脚本,向该文件传递参数
    bash parameter.sh cls  xz
    # 输出的内容
    parameter.sh cls xz 
    2
    
        
       

$*和$@

这两个变量都是代表命令行中所有的参数,具体的区别,我会在循环中演示

  • 基本语法
    $*	(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
    $@	(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
    
        
       
  • 示例
    # 创建sh脚本
    vim parameter.sh
    # 编写脚本文件
    #!/bin/bash
    echo "$0  $1   $2"
    echo $#
    echo $*
    echo $@
    # 运行脚本并传递参数
    bash parameter.sh 1 2 3
    # 输出的内容
    parameter.sh  1   2
    3
    1 2 3
    1 2 3
    
        
       

$?

  • 这个参数用于返回最后一次执行命令的返回状态,它有两个返回值0和1,通常情况下我们可以将它理解为布尔值,如果我们最后一次执行命令没有问题,成功了,它返回的值就是0,反之就是1
  • 基本语法
    $?	(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
    
        
       
  • 示例
    # 执行脚本
    bash helloworld.sh 
    # 输出结果
    hello world
    # 判断helloworld.sh脚本是否正确执行
    $?
    # 输出结果
    0
    
        
       

Shell的运算符

  • 在前面介绍变量的时候说过,Shell默认的变量值都是字符串,那么我们要想做运行就需要通过运算符,运算符比较简单,通过案例就可以明白了
  • 基本语法
    $((运算式))”或“$[运算式]
       
  • 我建议使用 $[运算式]的方法,更加清爽易读
  • 示例
# 定义变量S,计算(2+3)X4的值
S=$[(2+3)*4]
# 使用echo输出S变量的值
echo $S
# 输出结果
20

  
 

条件判断

  • 我们在java中学习运算符时不仅仅是算术运算符,还有比较运算符等等,Shell中同样也有自己的比较运算符,但它有很多的特点,因此我单独将它抽出来

  • 基本语法

    (1)test 表达式
    (2)[ 表达式](注意表达式前后要有空格)
    注意:条件非空即为true,[ 表达式 ]返回true,[] 返回false。
    
        
       
  • 常用的判断条件

    比较两个参数

    条件参数 参数说明
    = 字符串比较
    -eq 等于(equal)
    -lt 小于(less than)
    -le 小于等于(less equal)
    -gt 大于(greater than)
    -ge 大于等于(greater equal)
    -ne 不等于(Not equal)
    © 版权声明
    THE END
喜欢就支持一下吧
点赞0 分享