1. 3种运行shell脚本的方式:
编辑一个shell脚本
后缀为 .sh 文件表示脚本文件
1 | #!/bin/bash 这段代码的意思是:解释器(如果用sh命令来执行shell脚本,这行代码可以不必添加) |
1)通过sh命令运行shell脚本
1 | [hadoop@hadoop001 shell]$ sh mand.sh |
2)通过全路径执行shell脚本
首先我们需要先看一下这个脚本文件:
1 | -rw-rw-r--. 1 hadoop hadoop 62 Apr 11 09:56 mand.sh |
要通过全路径方式执行脚本,需要的要求:
①必须要赋予可执行的权限 x
1 | chmod +x mand.sh |
②脚本中的一行必须是
1 | #!/bin/bash (表示这个一个脚本) |
执行结果如下:
1 | [hadoop@hadoop001 shell]$ /home/hadoop/shell/mand.sh |
3) 通过当前路径执行脚本:
这种执行方式的要求和全路径执行的要求是一样的。
① 赋予x权限
②脚本第一行:
1 | #!/bin/bash |
执行结果如下:
1 | [hadoop@hadoop001 shell]$ /home/hadoop/shell/mand.sh |
进入debug模式:
1 | #!/bin/bash -x |
也可以通过 sh +x mand.sh 命令来执行
执行结果:
1 | [hadoop@hadoop001 shell]$ ./mand.sh |
2.变量的定义和引用:
1 | !#/bin/bash |
3.传递参数
1 | !#/bin/bash |
执行结果:
1 | [root@hadoop001 shell]# sh parameter.sh 5 a m |
4.数组:
shell脚本中只支持一维数组1 | #!/bin/bash |
执行后结果:
1 | [hadoop@hadoop001 shell]$ ./array.sh |
5.if判断
1 | #!/bin/bash |
执行结果:
1 | [hadoop@hadoop001 shell]$ sh if.sh |
6.循环:
for循环:
1 | #!/bin/bash |
while循环:
1 | x=1 |
7.分割
1 | A="xiaoqiang,xiaoxin,yibao,mili,moumou" 字符串 |
8.awk 取数
1 | [hadoop@hadoop001 shell]$ cat awk.log |awk '{print $1}' 取第一列 |
生产中日志里面数据的分隔符是按照某种规定分割的,并不是你所想要的这时候该怎么做
1 | [hadoop@hadoop001 shell]$ cat awk.log |awk -F "," '{print $1,$2}' |
另一种方式:
1 | [hadoop@hadoop001 shell]$ awk -F "," '{print $1,$2}' awk.log |
9.sed 替换
1 | [hadoop@hadoop001 shell]$ vi sed.log |