• Shell:Day10


    shell脚本:
    明白一点:shell脚本本身是一个工具
     在写shell脚本之前,就要明白:这个功能能到底如何实现?
     curl 访问文件源代码,查看网站状态;
     才能通过shell(bash)所提供的逻辑关系,来串联这些语句,从而实现,脚本运维自动化;
    1、bash的特性
     history
     重定向原理
     *shell cli界面的快捷键*
      ctrl+w
     文件通配globbing 
    2、编程原理
     编程原理:二进制  程序:指令+数据+【逻辑关系】
     编程语言的分类:高级语言:1、解释  2、面向 3、变量
     驱动!!
     指令:
      Linux系统执行的命令(基础)
     逻辑关系:
      顺序执行
      循环 for while until
      分支 if case
      exit break continue 函数(return)sleep
     数据:
      变量
      echo print printf
      输入 read
      bash支持的默认变量
       环境变量(可以直接在代码中使用 $RANDOM env set)  cd - $OLDPWD $PWD
       传参 $# $? $1 $2 ... $$ $0  $! esc+. !$ ...
       自定义变量:
        局部变量
        函数(本地变量) local
        数组
         a=(a b c d e)
              0 1 2 3 4  -- 5
         a[5]=f
         a[${#a[*]}]=f
         echo ${a[*]}
         echo ${#a[*]}
    3、文本处理三剑客
     *正则表达式(globbing)
       <img src="//static.firefoxchina.cn/img/201903/7_5c862cd3c194d0.png"/>
      grep "^<img[[:space:]].*/>$"
     *grep 行过滤
      grep egrep fgrep
     *sed 行编辑
      sed的子命令 s
     *awk 报告生成
      独立的编程语言解释器;他有自己独立的语法格式;
      awk的工作原理:1、取  2、分隔 3、处理
      awk [option]... 'program' file ...
      1、option -F -v
      2、program
       1、print 、 printf(占位符、修饰符(注意:不能忘记回车 ))
       2、变量
        内置变量:NF($NF变量调用) (类似于bash的 环境变量)
        FS OFS (cut --output-dimeter) RS ORS FNR NR ARGV ARGV FILENAME
        -v
       3、地址定界(pat 正则表达式)
        1、空 2、NR>=10&&NR<=20 3、/pat/ 4、/pat1/,/pat2/ 5、BEGIN|END 6、pat1?pat2:pat3【?】
       4、运算符
        1、数值运算符:%【取余取模】  //【取整】
         随机整数: $RANDOM%100+1        -101%100
        2、比较运算  > < = != >= <=
        3、逻辑运算 && || !
        4、赋值运算 = += 1= ++ --
       5、action
       6、语法
        if switch while do-while for
        break continue next(!控制默认循环)
      
        if(条件语句){执行语句}  
        if(条件语句){执行语句}else{执行语句}
        初始语句;while(判断条件){循环体;初始值控制语句}
        for(初始语句;判断语句;初始值控制语句){循环体}
        for(变量 in 列表){循环体}
        。。。
       7、数组
        列遍历的数据统计:
        a
        b
        c
        a
        b
        c
        awk '{array[$1]++}END{for(i in array){printf "%10s出现了%10d次",i,array[i]}}' 文件名
        
        a b c a b c
        awk '/^[[:space:]]*kernel>/{{for(i=1; i<=NF; i++){array[$i]++}}END{for(j in array){print j,array[j]}}}' 文件
        
    awk '/^[[:space:]]*kernel>/{{for(i=1; i<=NF; i++){array[$i]++}}END{for(j in array){print j,array[j]}}}' 文件
     awk 'program' 文件
      1、地址定界  /^[[:space:]]*kernel>/
       /pat/  pattern(正则表达式)  -- ^[[:space:]]*kernel>
        ^ -- 以什么开头
        [[:space:]] -- 空格字符
        * -- 前面的字符出现任意次数
        “kernel” 固定字符串
        >  锚定一定是kernel
         
      2、语法statement  {{for(i=1; i<=NF; i++){array[$i]++}}END{for(j in array){print j,array[j]}}}
       1、循环 -- {for(i=1; i<=NF; i++){array[$i]++}}
        循环:for
        赋值:array[$i]++
       2、输出 -- END{for(j in array){print j,array[j]}}
        END  -- 在整个默认循环结束以后,执行的语句(只执行一次)
        循环 -- 索引  --  j
                   数组值  --  数值
  • 相关阅读:
    JVM 体系结构
    字符集和编码
    Thinking in Java 笔记
    HSDB
    jdb
    JVM-Class文件
    JVM-操作码助记符
    表、栈和队列
    算法分析
    Shell 编程
  • 原文地址:https://www.cnblogs.com/why098/p/11401667.html
Copyright © 2020-2023  润新知