• shell脚本--文本处理以及编程原理


    一、文本处理工具

    wc命令

    wc(Word count)用于统计文本文件中的字符个数

     

    15是行数  78是字符个数   805是文件大小(字节)【1字节等于8比特】

    2、参数:-l(统计行数)、-w(统计单词数)、-c(统计字节数)

    cut(切片)命令

    1、指定分隔符,切割文件

    2、常见参数:-d(指定分割符)、-f(指定提取哪一列)、--output-delimiter=‘’(将输出的分隔符,替换为自己想用的分隔符)

    示例:cut -d” ” -f1 /etc/fstab(取第一列)

        cut -d” ” -f1,3 /etc/fstab(取第1、3列)

        cut -d” ” -f1-3 /etc/fstab(取第1到3列)

        cut -d[:] -f1d /etc/fstab(指定分隔符为空格和冒号)([ ]代表括号里的 任意字符都匹配)

    3、cut无法指定多个分隔符,awk可以指定多个分隔符

     【cut的局限性:1、-d指定分隔符,不能同时指定多个  2、不能做高级的格式化输出;所以要掌握awk命令】

    sort命令

    1、sort命令根据ASCII码来进行排序,并不是数值大小

    2、常用参数:-r(逆序)、-f(忽略字符的大小写)

             -t(指定字段分隔符)、-n(以数值大小排序)

             -u(排序去除重复,重复的不显示)

           -k(指定哪一列进行排序)

    uniq命令

    1、uniq命令用于去重,但是只有连续且相同的命令才被视为重复【所以要先排序在去重】

    2、常用参数:-c(统计某些字符重复的字数)【例:sort filename | uniq -c】

                    -d(仅仅显示未重复过的行)

    练习:取出/etc/passwd文件的第6到10行,并将这些信息按照第3个字段的数值大小进行排序,最后仅显示各自的第一个字段

               Head /etc/passwd | tail -5 | sort -t: -k3 -n |cut -d” “ -f1

     二、编程原理

    1、机械码(16进制)的局限性:识别机器,各种品牌不兼容

    2、机器只能识别二进制指令

    3、程序=指令+数据

    4、驱动硬件设备默认不能使用;CPU控制硬件资源,CPU由控制器与运算器组成

    5、驱动程序:不同的厂家的硬件设备之间需要进行指令沟通时,我们需要驱动程序来进行“翻译”

    6、更接近于硬件开发的工程师要学习“汇编语言”,但是汇编语言被厂家所限制

    7、C语言与C++的底层为汇编语言

    8、操作系统用来分配硬件资源(操作系统用C语言来写)

    9、现在的编程基于高级语言及超高级语言,更好的让程序员能够实现编程功能。高级语言及超高级语言需要翻译成计算机可读的语言(二进制语言),翻译分为两种:解释型(逐行翻译,逐行执行,      例:bash -x filename(方便排错))与编译型(一次编译,全部执行)

    10、Shell,Python为解释型语言,编译安装大多使用C语言、C++、C#

    11、编程语言的分类:根据服务的重心不同,编程分为面向对象编程(侧重于数据的语言)和面向过程编程(侧重于指令的语言)。

    12、编程语言的执行方式【一行一行】:顺序执行(没有逻辑关系)、循环执行(for(遍历,常用)、While(循环条件,True的时候开始循环)、unti(与while相反,False的时候开始循环))、选择    执行(分支if语句、case(重点使用))

    13、Shell编程介绍:shell语句是面向过程的,侧重于指令集;

              shell语句的基本结构组成:命令、数据-变量、逻辑关系

              shell没有内嵌函数,没有函数库调用

                没调用的接口,这一点限制了shell脚本的功能,不像Python,可以调用各种模块接口

                优点:shell的功能更好的兼容系统,可以直接调用系统命令,执行效率更高

    14、shell脚本的第一句话必须写(#!/bin/bash)---->定义脚本解释器

    15、/etc/shells----------查看当前系统支持的shell程序 

          echo $SHELL-----查看当前会话的shell程序  

          /etc/passwd----------制定了用户默认支持的shell程序(/bin/nologin) 

    16、shell的执行:1、bash命令来执行脚本

                  参数:-n  查看shell脚本的逻辑错误

                                      -x  逐行显示执行的脚本程序(方便排错)

                                2、授权 chmod +x filename,然后使用全路径执行脚本

    17、变量:环境变量

            局部变量(declare 命令--定义变量类型)

            本地变量(local在函数中使用)

    18、变量类型:数值型(浮点型(float),整型(int),布尔值(bollean,0、1    及false、true))

                    字符串:(普通字符及字符串、数组)

    19、编程语言的分类:根据变量的不同,分为强类型语言(数值必须被定义,才能进行处理或运算)和弱类型语言(编程语言可以自动识别变量类型)

    20、多态:一个数据有多个属性,而最后使用的属性取决于和它进行运算的数据

    21、传参:$?(上一条命令的执行状态,0代表正确,1-255表示错误)

            $1、$2、${10}--------命令后面传入脚本的数据,以空格为分隔符

          $#(统计传参数量,${$#}统计传参量)

          $*(表示所有传参,所有的传参以字符串形式输出)

            $@(表示所有传参,所有的传参以列表形式输出)

                     

    22、定义变量格式:NAME=VALUE(中间不要有空格,一个等号是赋值,两个等号是判断)

             通过命令declare定义变量参数(例:declare -i a=10 int() str())

              declare -a(代表数组)、declare -i (代表整数)

    23、变量命名:下划线的方式指定变量名称

              驼峰命名方式

    24、文件测试、条件判断:在脚本语言中,我们需要进行语句分支,就是要做判断,判断就是使用test命令来实现的。

    使用格式:test [option] file

                       [  条件语句 ]

    【不用test做判断时不加[  ]】

    常见的test选项:

    比较选项:-eq(等于)、-en(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)【用于数值的判断,字符用=、!=】

    判断选项:-f(判断是否为普通文件)、-d(判断是否为目录件)、-L(判断是否为链接文件)、-r、-w、-x(判断是否具有读 写 执行的权限))

    关联选项:-o(或)、-a(与)、!(非)

    字符串测试:=(等于为真)、!=(不等于为假)、-z(判断字符串是否存在,存在为真,不存在为假)、-n(与-z相反)

    25、逻辑运算:与 && :两边的命令都为真时结果才为真

              或 || :两边的命令,一边为真就是真,同时为假才是假

            非 !

            [ $? -eq 0 ]  && exit 0 || exit 1

    前后对接的都是单独的存在的命令,前后的两个命令没有任何关系只是通过逻辑运算符联系在一起

    26、算数运算:let(1+1)    例:let a=1+1  echo $a 

                   expr(1*1)   例:exor 1* 10

              $[]   [$1+10]   例:a=$[2+3]   echo $a   

           $(())   (($1/$2))      例:a=$((2/4))   echo $a

     27、编程练习

    输出100以内的书的和

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    declare -i i=0
    declare -i sum=0
    while [ $i -le 100 ] ;do
            sum+=$i
            let i=i+1
    done

    执行结果:

    传参

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    echo "$1 $2 ...${10}"
    echo $?
    echo $#
    echo $*
    echo $@
    echo ${$#} 

    执行结果:

    判断文件是否存在

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    #判断文件是否存在
     
    if [ -f $1 -a -w $1 ];then
            echo "$1 文件不存在"
    else
            echo "$1 文件已存在"
    fi

    判断用户类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    #判断用户类型
     
    declare -i uid=`uid -u $1`
     
    if [ $uid -eq 0 ];then
            echo "这个是管理员"
    else
            echo "这是个普通用户"
    fi

    执行结果:

  • 相关阅读:
    1-wire单总线DS18B20
    开漏输出
    拉电流(source current)与灌电流(sink current)
    高阻态;什么是三态门? 三态逻辑与非门电路以及三态门电路
    小电流MOS管
    DS18B20 CRC8分析
    go hmac使用
    gin入门
    go web框架推荐
    Go语言入门系列2 基本语法
  • 原文地址:https://www.cnblogs.com/Eucalyptusleaves/p/11422431.html
Copyright © 2020-2023  润新知