我是靠谱客的博主 耍酷导师,最近开发中收集的这篇文章主要介绍【博学谷学习记录】超强总结,用心分享丨大数据超神之路(四):shell脚本第1章 shell的变量以及常见符号第2章 处理海量数据的grep、cut、awk、sed 命令第3章 shell函数第4章 案例实战,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 第1章 shell的变量以及常见符号
- 1.1 shell的变量
- 1.2 常见的几个符号
- 1.3 常见的条件判断
- 第2章 处理海量数据的grep、cut、awk、sed 命令
- 2.1 grep命令
- 2.2 cut命令
- 2.3 awk命令
- 2.4 sed命令
- 第3章 shell函数
- 3.1 函数
- 3.2 函数状态码
- 第4章 案例实战
- 4.1 巡检内存使用率
- 4.2 备份mysql
- 4.3 Crontab表达式
1、Shell是一种编程语言,该语言底层是C语言
2、Shell是一种解释型语言,和python类似
3、shell以后主要用于脚本编写,通过脚本实现自动化部署和调度
4、Shell是语言的统称,在Shell下面又细分了很多不同的Shell语言,默认用的Base Shell
5、Shell脚本文件的后缀是.sh,不过也可以不写
6、shell一定得不一定有解释器,默认的解释器# !/bin/bash
第1章 shell的变量以及常见符号
1.1 shell的变量
shell不同于其它语言需要先声明变量
shell的变量直接使用,eg:a=15
调用变量的话 $或者a 或者 ${a}
$? #判断上一条命令执行的是否成功
$0 #返回脚本的文件名称
$1-$9 #返回对应的参数值
$* #返回所有的参数值是什么
$# #返回参数的个数和
1.2 常见的几个符号
> #会覆盖原有的内容
>> #不会覆盖原有的内容
; #执行多条命令
| #管道符
&& #前面的命令执行成功,后面的才可以执行
|| #前面的命令执行失败,后面的才可以执行
"" #会输出变量值
'' #输出本身
`` #输出命令结果 eg:a=`date`;echo $a
2>/dev/null #错误输出到无底洞
1>/dev/null #正确输出到无底洞
1.3 常见的条件判断
文件(夹)或者路径:
-e 目标是否存在(exist)
-d 是否为路径(directory)
-f 是否为文件(file)
-r 是否有读取权限(read)
-w 是否有写入权限(write)
-x 是否有执行权限(excute)
-eq 等于(equal)
-ne 不等于(not equal)
-gt 大于(greater than)
-lt 小于(lesser than)
-ge 大于或者等于(greater or equal)
-le 小于或者等于(lesser or equal)
[ 9 -gt 8 ] && echo '大于'
[ -x 123.txt ] && echo '有执行权限'
[ -e foer.sh ] || touch foer.sh #判断当前目录下是否有foer.sh这个文件,假如没有就创建出foer.sh文
件
第2章 处理海量数据的grep、cut、awk、sed 命令
2.1 grep命令
grep应用场景:通常对数据进行 行的提取
语法:grep [选项]...[内容]...[file]
-v #对内容进行取反提取
-n #对提取的内容显示行号
-w #精确匹配
-i #忽略大小写
^ #匹配开头行首
-E #正则匹配
2.2 cut命令
cut应用场景:通常对数据进行列的提取
语法:cut [选项]...[file]
-d #指定分割符
-f #指定截取区域
-c #以字符为单位进行分割
注意:不加-d选项,默认为制表符,不是空格
/bin/bash #代表可以登录的用户
/sbin/nologin #代表不可以登录的用户
-d与-f
eg:
以':'为分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
eg:
以':'为分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
eg:
以':'为分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd
-c
eg:
截取/etc/passwd文件从第二个字符到第九个字符
cut -c 2-9 /etc/passwd
eg:比如领导想叫你截取linux上面所有可登陆普通用户
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root
2.3 awk命令
awk的简介:其实一门编程语言,支持条件判断,数组,循环等功能,与grep,sed被称为linux三剑客之所以叫AWK是因为取其三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的
首字符
awk的应用场景:通常对数据进行列的提取
awk '条件 {执行动作}'文件名
awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
或awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
2.4 sed命令
sed的应用场景:主要对数据进行处理(选取,新增,替换,删除,搜索)
sed语法:sed [选项][动作] 文件名
常见的选项与参数:
-n #把匹配到的行输出打印到屏幕
p #以行为单位进行查询,通常与-n一起使用
eg:df -h | sed -n '2p'
d #删除
eg: sed '2d' df.txt
a #在行的下面插入新的内容
eg: sed '2a 1234567890' df.txt
i #在行的上面插入新的内容
eg: sed '2i 1234567890' df.txt
c #替换
eg: sed '2c 1234567890' df.txt
s/要被取代的内容/新的字符串/g #指定内容进行替换
eg: sed 's/0%/100%/g' df.txt
-i #对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
搜索:在文件中搜索内容
eg:cat -n df.txt | sed -n '/100%/p'
-e #表示可以执行多条动作
eg:cat -n df.txt | sed -n -e 's/100%/100%-----100%/g' -e '/100%-----100%/p'
第3章 shell函数
3.1 函数
[ function ] funname()
{
action;
[return int;] #这里的return不是用来返回函数的返回值,而是用来返回函数执行完的状态码($?)
}
#----定义1:没有参数,没有返回值-----------
function func1(){
echo "Hello World"
}
调用函数:
func1
#----定义2:有参数,没有返回值-----------
function func2(){
echo "Hello World--$1--$2" #这里的$1和$2是向函数传入的参数
return 1
}
调用函数:
func2 aaa bbb
#----定义3:有参数,有返回值-----------
func3(){
sum=$[$1+$2]
echo $sum #shell的函数的返回值必须通过echo返回
}
调用函数:
result=$(func3 10 20)
echo "result=$result"
总结:
1、如果单独调用函数,则函数内部的echo会直接输出到控制台
func3
2、如果想要有返回值,则函数内部一般只写一个echo
result = $(func3 10 20)
3.2 函数状态码
#----定义3:有参数,有返回值-----------
func3(){
sum=$[$1+$2]
echo $sum #shell的函数的返回值必须通过echo返回
}
调用函数:
result=$(func3 10 20)
echo "result=$result"
总结:
1、如果单独调用函数,则函数内部的echo会直接输出到控制台
func3
2、如果想要有返回值,则函数内部一般只写一个echo
result = $(func3 10 20)
第4章 案例实战
4.1 巡检内存使用率
#!/bin/bash
# 内存使用率
mem_total=`free -m | sed -n '2p' | awk '{print $2}'`
mem_used=`free -m | sed -n '2p' | awk '{print $3}'`
mem_free=`free -m | sed -n '2p' | awk '{print $4}'`
Percent_mem_used=`echo "scale=2; $mem_used / $mem_total * 100" | bc`
Percent_mem_free=`echo "scale=2; $mem_free / $mem_total * 100" | bc`
now_time=`date +"%Y-%m-%d %H:%M:%S 星期%w"`
echo -e "n"
echo -e "$now_timen内存的使用率是:$Percent_mem_used%"
echo -e "内存还剩:$Percent_mem_free%未使用"
# 检查负载是否有压力
if [ $mem_used -gt 4096 ]
then
echo -e "