首页 > 系统服务 > 详细

6.shell脚本

时间:2019-06-18 21:50:54      阅读:170      评论:0      收藏:0      [点我收藏+]

5.1 shell基础语法

  5.1.1 shell的概述

    • shell的基本概念

      1.什么是shell

        • shell是用户和Linux操作系统之间的接口,它提供了与操作系统之间的通讯方式
        • shell是一个命令解释器,它接收用户发出的命令,然后调用相应的应用程序

      2.系统提供了哪些种类的shell

        通过cat /etc/shells可查阅系统提供的shell

        技术分享图片

        本文主要介绍/bin/bash,因为它兼容于sh,它是依据使用者需求而对sh进行了加强

  5.1.2 shell中的变量

    • shell中变量的基本概念

      1.什么是变量

        • 变量是值可以改变的量,在计算机中变量能存储计算结果或者表示某一个值
        • 例如:y = x + 1,其中y就是变量
    • 变量的读取

      1.通过echo命令读取

        语法格式1: echo $变量名 

        语法格式2: echo ${变量名} 

        示例:

        读取登录用户名:echo $LOGNAME

        读取用户home目录:echo $HOME

        读取当前系统默认的shell:echo $SHELL

        技术分享图片

        注意:当变量名后面连着其他符号时,为了避免不必要的错误建议使用格式2

    • 环境变量的设置与查看

      1.环境变量的查看

        语法格式: env|more 

        技术分享图片

        设置环境变量使用set命令

    • 将普通变量变为环境变量

      1.通过关键字:export

        语法格式1: export 变量名=变量值 

        语法格式2:变量名=变量值

              export 变量名

    • 局部变量的设置规则

      1.变量与变量内容以一个等号"="连接,变量名=变量值

      2.等号两边不能直接接空格符,如(变量名 = 变量值)这是错误的

      3.变量名称只能是英文字符、数字、下划线组成,但是不能以数字开头

      4.变量内容若有空格符可使用双引号或者单引号将变量内容结合起来

        |-双引号中的特殊字符保有原本的特性

          |-例如:var="lang is ${LANG}",则echo $var的结果为lang is en_US.UTF-8

          技术分享图片

        |-单引号中的特殊字符仅为存文本(一般字符),就类似java中的String类型的数据

          |-例如:var=‘lang is ${LANG}‘,则echo $var的结果为lang is ${LANG}

          技术分享图片

      5.可以使用转义字符"\"将特殊符号(如$、\、!等)变为一般字符

      6.如果变量的内容是由其他命令提供的,需要使用$(命令)来获取变量的值

        |-示例

          技术分享图片

    • 变量的其他操作

      1.为变量增加额外内容

        示例:

        技术分享图片

      2.取消变量的定义

        语法格式: unset 变量名 

        示例:

        技术分享图片

        注意:

        如果取消系统的环境变量,需要修改/etc/profile文件,不然不生效

        系统默认的变量通常变量名都为大写,自定义的变量建议使用小写,方便区分

    • 把一个命令定义成一个变量

      1.使用反引号(反引号为tab键上方的按键)

        语法格式: 变量名=·命令名· (使用反引号包住命令)

        示例:

        技术分享图片

        由示例看出,这种方式变量的值就为命令获取的值

      2.使用圆括号

        语法格式: 变量名=(命令) 

        示例:

        技术分享图片

        由示例看出,此种方式变量的值就是命令本身

    • 变量总结

      1.全局变量:

        • 一般全大写,比如环境变量

      2.局部变量:

        • 在脚本函数中的局部变量通常使用local修饰
        • local I :表示变量i的有效范围在该函数的内部有效

      3.把一个命令定义成一个变量$(命令)或者·命令·

      4.若变量和其他字符组成新的变量就需要个变量加上大括号,否则容易出错如${date}day

  5.1.3 数据重定向

    • 数据重定向概述

      1.数据重定向的基本概念

        • 数据重定向就是将某个命令执行后应该要出现在屏幕上的数据,给它传输到其他的地方
        • 通常执行一条命令的时候会有标准输出和标准错误输出
        • 标准输出:是指命令执行之后,传回正确信息的输出目标
        • 标准错误输出:是指命令执行失败后,所传回错误信息的输出目标

          技术分享图片

    • 数据重定向的应用

      1.数据重定向的命令及其对应的编号

        数据重定向对应的编号

        技术分享图片

        常用的组合命令及其含义

        技术分享图片

        示例:将ls的输出重定向到ls.log文件中

        技术分享图片

      2.使用数据重定向的方式书写内容到指定文件

        语法格式: cat > filename << "EOF" 

        输入此命令,此后所有的内容都会有">"提示输入,直到输入一个"EOF",才会关闭输入流

        示例:

        技术分享图片

      3.使用数据重定向测试执行程序

        对程序进行测试,就是看看能否执行成功,无需显示执行过程和信息

        示例:

        技术分享图片

        示例中,/dev/null,叫做"黑洞",把数据输出到此设备中,不会被保存,而是被丢弃

        2>&1:表示无论是错误的还是正确的信息都输出到/dev/null设备中

  5.1.4 命令回传值

    • 命令回传值概述

      1.命令回传值的基本概念

        • 在Linux系统中,一个命令执行完之后,必然会有一个回传值,作用是用于判断命令是否执行成功
        • 在Linux系统中,回传值为0表示的含义就类型java中的true,其他数字均表示为false
        • Linux中通过:echo $?,来获取回传值
    • 命令回传值的应用

      1.Linux系统中的短路与(&&)和短路或(||)

        短路与和短路或的应用

        技术分享图片

        示例:判断/temp/test是否存在,存在则创建/temp/test/test.txt

        技术分享图片

  5.1.5 常用的shell命令

    • 管道符及grep命令

      1.管道命令的基本概念

        • 在Linux系统中"|"表示管道符,用它来讲两个命令隔开
        • 管道符左边命令的输出会作为管道符右边命令的输入
        • 连续使用管道符就表示第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三命令的输入,以此类推

      2.grep命令

        • 查看源系统解释可知grep命令,是通过正则表达式搜索对应的文件或者是打印出来通过正则表达式匹配到的内容

        技术分享图片

      3.示例

        将ls查询到的信息传递给grep命令进行搜索匹配文件夹名包含"ba"的内容

        技术分享图片

    • find命令

      1.find命令的功能

        find命令能够在一个目录中搜索文件,可以指定匹配条件,比如按文件名,文件类型等

      2.find命令及其常用选项

        语法格式: find [目录路径] [选项] 参数 

        常用选项:

        技术分享图片

    • sed命令

      1.sed的基本概念

        • sed是非交互式文本处理工具,在默认情况下,sed将所有输出的行打印到屏幕上
        • sed可以通过数据重定向的方式,将输出的内容保存到某个文件里

      2.sed逐行处理文件,并将结果发送到屏幕的具体过程

        • sed把当前正在处理的行保存在一个临时缓冲区
        • 然后处理临时缓冲区中的行,完成后把该行发送到屏幕上
        • sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示
        • 处理完输入文件的最后一行,sed变结束运行
        • sed把每一行都存在临时缓冲区中,然后对缓冲区这个副本进行编辑,所以源文件不会发生改变

      3.sed命令的应用

        语法格式: sed [选项] "[动作]" fileName  

        常用选项:

        技术分享图片

        特殊选项:

           技术分享图片

        示例:修改源文件,同时想要修改后的源文件的内容显示在屏幕上

        技术分享图片

        常用动作:

        技术分享图片

        示例:sed "s/baiduhadoop/hadoop/g" demo.txt

        技术分享图片

        技术分享图片

        注意:

        如果想要修改源文件的内容,使用选项-i即可:sed -i "s/baiduhadoop/hadoop/g" demo.txt

        如果向输出到其他文件里sed  "s/baiduhadoop/hadoop/g" demo.txt > demo1.txt

        示例:应用多条sed的动作进行文件内容的修改

        方式1,通过-e选项:sed -e "s/h/H/g" -e "s/o/O/g" fileName

        方式2,通过在引号中添加分号的形式:sed "s/h/H/g;s/o/O/g" fileName

    • sort命令

      1.sort命令的作用

        • sort是将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较

      2.sort命令及其选项

        语法格式: sort [选项] 参数 

        常用选项:

        技术分享图片

      3.示例

      默认排序:

      技术分享图片

      指定的四段进行排序:

      技术分享图片

    • cut命令

      1.cut命令的作用

        cut命令在文件中负责剪切数据用的,但是数据必须是有规则的数据

      2.cut命名及其常用选项

        语法格式: cut [选项] [参数] fileName 

        常用选项:

        技术分享图片

        示例:

        技术分享图片

        示例:剪切每一行的第5个到第7个字节

        技术分享图片

        示例:剪切每一行第6个字节之后的内容

        技术分享图片

        示例:剪切每一行,第6个字节之前的内容

        技术分享图片

    • history历史命令

      1.history命令的作用

        该命令用于显示历史执行过的所有命令

      2.历史命令的一些执行命令

        技术分享图片

5.2 shell高级-脚本

  5.2.1 shell script概述

    • shell script的基本概念

      1.什么是shell script

        shell script就是以固定语法组织起来的存文本文件

        可以编译这个文件,让文件帮助我们一次执行多条命令

        可以通过一些运算与逻辑判断来达成较为复杂的功能

      2.shell script的注意事项

        命令的执行是从上而下,从左到右执行的

        命令、选项和参数间的多个空格会被忽略

        空白行也被忽略掉,tab被当成空格

        "#"后面的内容为注释,不会执行

        如果读取一个Enter符号,就会尝试开始执行该行命令

    • shell script如何执行

      1.直接执行

        假设程序文件名是:/home/shell.sh(该文件必须是可读可执行的权限(rx))

        通过绝对路径:运行/home/shell.sh

        技术分享图片

        通过相对路径:先cd到/home/,使用./shell.sh 执行

      2.通过source执行

        假设程序文件名是:/home/shell.sh(该文件必须是可读可执行的权限(rx))

        语法格式:source /home/shell.sh

        技术分享图片

 

      3.通过sh执行

        假设程序文件名是:/home/shell.sh(该文件必须是可读可执行的权限(rx))

        语法格式:sh /home/shell.sh

        技术分享图片

  5.2.2 shell脚本的编写

    • 编写一个交互式脚本

      1.提示用户输入两个数字,然后对这两个数字进行相乘,给用户返回结果

        #!/bin/bash

      #告诉用户本程序的功能,并且引导用户进行内容的输入
      echo "您好,请输入两个数字,我将对这两个数字进行乘法运行,给您返回结果!"

      #引导用户输入
      read -p "请输入第一个数字:" num1
      read -p "请输入第二个数字:" num2

      #计算结果,并返回
      mul=$(($num1*$num2))
      echo "您输入的两个数字${num1}*${num2}的结果是${mul}"

技术分享图片

      以上脚本解析:

        • 第一行#!/bin/bash,告诉系统如何执行脚本。当采用直接执 行(不是用类似sh  xxx.sh这样的方式)时,此行必须有,且要放在首行。
        • 除了第一行的之外#都是注释,其他为程序部分。
        • read   -p  "提示信息" 变量名
        • echo 后面为返回值,返回到屏幕
    • test判断命令

      1.test命令及其选项

        语法格式:test [选项] 参数

        常用选项:

        技术分享图片

      2.编写一个脚本,判断文件时那种类型,具有哪些权限     

      #!/bin/bash
      #先给予提示
      read -p "请输入一个文件名,将对其判断文件类型及其权限" fileName

      #是否输入了文件名,如果为空,进行提示,并提示脚本
      test -z $fileName&&echo "您必须输入一个文件名" && exit 1

      #判断文件/目录是否存在?不存在则结束脚本
      test !-e $fileName && exit 2

      #判断文件类型及其统计文件具有哪些权限
      test -f $fileName && filetype="文件"
      test -d $fileName && filetype="目录"
      test -r $fileName && filetype=""
      test -w $fileName && filetype="${fileperm}-写"
      test -x $fileName && filetype="${fileperm}-执行"

      #输出文件类型和文件所有的权限
      echo "您输入${fileName}的类型是${filetype},它具备的权限是${fileperm}"

 

 

 

          

 

 

        

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

 

 

      

 

 

 

 

 

        

 

 

        

 

 

 

 

 

 

 

      

 

 

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.shell脚本

原文:https://www.cnblogs.com/super-education/p/11042656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!