zoukankan      html  css  js  c++  java
  • shell编程学习的9个编程案例及基础知识

    【知识储备】

    1.shell脚本文件的后缀业内都默认为sh,所以以后看到以sh结尾的文件名称基本上就是shell脚本。

    2.在写shell脚本的时候,标准开头就是

    #!/bin/bash

    3.shell脚本写完以后要加执行权限

    chmod +x  shell脚本名称

    4.执行shell脚本有很多种方式

      (1)./shell脚本名称

      (2)sh  shell脚本名称   ##注意这种执行方式,即使不加执行权限也可以执行

       (3)shell脚本的全路径  直接回车,也可以执行

     5.shell脚本也可以debug    

        (1)在 sh执行命令后加 -x    即 是 sh -x shell脚本名称

          (2)在shell脚本里边的#!/bin/bash的后边  加上 -x   也可以

    【案例一】

    echo的作用:打印输出

     1@编辑内容

    2@输出结果

    【案例二】

    变量定义和引用

     1@编辑内容  

     

    2@输出结果

    3@总结

      (1)反引号的里边引用的内容一定要是一个命令,用反引号定义的变量是动态变量

      (2)引用变量用$,变量要放在{}里边(其实不放也可以,为了规范,为了不跳要加大括号)

       (3)K=V 'V' "V"  这种加单引号,双引号或者啥也不加的变量叫静态变量

        (4)变量定义的=号前后不能有空格(大坑

     【案例三】

      传递参数

       1@编辑内容  

        

      2@输出结果

       

      3@总结

         (1)$# 这个程式的参数个数

          (2)$* 这个程式的所有参数,此选项参数可超过9个。

          (3)$$ 这个程式的PID(脚本运行的当前进程ID号)

           (4)$1 和 $2 是需要输入的参数,$1代表第一个参数,$2代表第二个参数,参数之间的间隔用空格键

      4@拓展

        $0 这个程式的执行名字

        $n 这个程式的第n个参数值,n=1..9

         $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)

        $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

        $- 显示shell使用的当前选项,与set命令功能相同

        $@ 跟$*类似,但是可以当作数组

     【案例4】

       数组

     1@编辑内容  

      2@输出结果

     

    3@总结

       (1)shell中的数组只支持一维的

       (2) arr[@]和arr[*]都代表数组的全部内容

       (3)arr[数字]  打印输出的是对应数组里的内容,注意,数组里的下标是从零开始的

       (4) #arr[@]   打印输出的是数组内元素的个数

        (5)数组内元素之间的间隔是用空格分开的,这个在shell中式默认的

     【案例5】

       if判断

      1@编辑内容  

       2@输出结果

     3@总结

      基本的if条件命令选项有:

    - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])

    -ne —比较两个参数是否不相等

    -lt —参数1是否小于参数2

    -le —参数1是否小于等于参数2

    -gt —参数1是否大于参数2

    -ge —参数1是否大于等于参数2

    -f — 检查某文件是否存在(例如,if [ -f "filename" ])

    -d — 检查目录是否存在

    几乎所有的判断都可以用这些比较运算符实现。

    脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

    str1 = str2      当两个字符串有相同内容、长度时为真

    str1 != str2      当字符串str1和str2不等时为真

    -n str1        当字符串的长度大于0时为真(串非空)

    -z str1        当字符串的长度为0时为真(空串)

    【案例6】

      循环
    1@编辑内容  

     2@输出结果

     

    3@总结

       (1)在比较大小的时候if (( $i >= 5 ));  这里如果用数学符号,<,=,或者>等等要用双括号把条件扩起来

        (2)如果用- eq、-ne等这种,要用中括号扩起来[]

        (3)循环的种类比较多,后期会有补充

     【案例7】

     分割

     1@编辑内容 

     2@输出结果

    3@总结

      (1)OLD_IFS="$IFS"

           IFS="," --分割符号是逗号

           arr=($S)  --把S这个字符串变量转换成数组

           IFS="OLD_IFS"

      这里代码OLD_IFS="$IFS", IFS="OLD_IFS" 这里是固定的,不需问为什么

       (2)注意这里的循环就是用了for  X in (一组数字),这里是用的数组的形式

     【案例8】

       取数

    1@编辑测试log 

      2@awk命令输出结果

     

     【案例9】

     替换

    1@编辑测试log 

      2@sed命令输出结果

    3@总结

    [root@hadoop001 shell]# sed -i 's/a/aa/' sed.log
    [root@hadoop001 shell]# cat sed.log
    aa b c
    1 2 3
    [root@hadoop001 shell]# sed -i 's/aa/aa'/' sed.log
    > ^C
    [root@hadoop001 shell]# sed -i "s/aa/aa'/" sed.log
    [root@hadoop001 shell]#
    [root@hadoop001 shell]#
    [root@hadoop001 shell]# cat sed.log
    aa' b c
    1 2 3
    [root@hadoop001 shell]# sed -i "s?aa'?bbb?" sed.log
    [root@hadoop001 shell]# cat sed.log
    bbb b c
    1 2 3
    [root@hadoop001 shell]# sed -i "s/b/w/" sed.log
    [root@hadoop001 shell]# cat sed.log
    wbb b c
    1 2 3
    [root@hadoop001 shell]# vi sed.log
    bbb b c
    1 2 3

    全局替换
    [root@hadoop001 shell]# sed -i "s/b/w/g" sed.log
    [root@hadoop001 shell]# cat sed.log
    www w c
    1 2 3


    前面加
    [root@hadoop001 shell]# sed -i "s/^/uuu&/g" sed.log
    [root@hadoop001 shell]# cat sed.log
    uuuwww w c
    uuu1 2 3

    后面加
    [root@hadoop001 shell]# sed -i "s/$/&uuu/g" sed.log
    [root@hadoop001 shell]#
    [root@hadoop001 shell]# cat sed.log
    uuuwww w cuuu
    uuu1 2 3uuu

    大数据压缩格式详解

    https://www.cnblogs.com/yurunmiao/p/4528499.html

  • 相关阅读:
    shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性
    普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点
    Cuckoo hash算法分析——其根本思想和bloom filter一致 增加hash函数来解决碰撞 节省了空间但代价是查找次数增加
    Merkle 树——空间换时间,分而治之的hash表,通过根节点是由它的两个子节点内容的哈希值组成来校验数据完整性,定位篡改的数据位置
    图解Skip List——本质是空间换时间的数据结构,在lucene的倒排列表,bigtable,hbase,cassandra的memtable,redis中sorted set中均用到
    LSM Tree 学习笔记——本质是将随机的写放在内存里形成有序的小memtable,然后定期合并成大的table flush到磁盘
    LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
    Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。
    一个php user class
    CI 模板解析器类
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10687781.html
Copyright © 2011-2022 走看看