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

原文地址:https://www.cnblogs.com/xuziyu/p/10687781.html