shell笔记_知识回顾

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

                                       数组值  --  数值

原文地址:https://www.cnblogs.com/baocx/p/11400893.html