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

  • 相关阅读:
    了解windows下的npm
    “jupyter notebook 不能导入python库但是终端上可以实现”的问题的解决
    本地创建的jupyter notebook 无法连接本地环境(即不能运行代码)
    win10 + ubuntu 下右键新建md文件(转载)
    LeetCode刷题2
    【入门】离散化
    【10.5NOIP普及模拟】sum
    【10.5NOIP普及模拟】sort
    【2020.02.01NOIP普及模拟4】怪兽
    [图论]最小花费
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10687781.html
Copyright © 2011-2022 走看看