1.shell学习笔记
如下
2.明日学习计划
下一步是学习Hadoop,之前看过800分钟的视频,学会了搭建Hadoop,hive,并连接帆软BI进行展示。今天看了另一个系列的视频,有1600多分钟,其中包括了调优,源码和一些参数配置,这是之前没了解到,但是实际工作和面试会问到的,这次看Hadoop主要侧重以上3点的学习。
明日学习时间控制在4小时以上。早上10点--12点;下午4点--6点,晚上抽空总结学习成果并记录下来!
3.整体进展情况
暂定的学习路线:shell,Hadoop,zookeeper,hive,flume,sqoop,kafka,数仓建设规范,维度建模,实战项目,SQL调优,常用算法
目前shell已学完
shell
20220701
1https://blog.csdn.net/weixin_45058470/article/details/bin/sh是指向/bin/bash的软链接,用来解析shell脚本
2.$是变量符号,后跟变量名称
3.export $var 表示将var变量全局化
4.$n $0表示脚本名,$1-9表示第N个变量
5.$# 表示参数个数
6.$* 表示所有输入的参数,作为一个整体
7.$@ 表示所有输入的参数,作为个体
8.$? 测试上一条命令是否成功执行;返回0表示正常,其他表示错误;
9.expr 3 + 2 表示计算3+2;expr用来运算,后边的参数之间必须有空格,expr可以嵌套,但是一般不用;
10.s=$[(2+3)*4] ;var=$[] 这种格式也可以用来初始化变量;
11.[] 条件判断,中间写条件,操作符包含:-ge 大于等于 -gt 大于 -lt 小于 -le 小于等于 -ne 不等于 -f 是否文件 -d 是否目录 -e 是否存在 -r 可读权限 -w -x
判断大小时,中间参数,必须前后空格 判断文件时,参数需要前后空格
多条件判断,可以用&&和||表示与和或
补充:
shell是一个命令行解析器,接收应用程序或用户命令,调用系统内核。
Linux架构:由内而外是硬件>Linux内核>shell>应用程序
脚本以 #!/bin/bash 开头是用来指定解析器的
touch 用来修改文件的时间属性,如文件不存在,则新建空文件
-----------------------------------------------------------------------------------------------------------
20220702
1.流程控制
1.1 if判断
if [ 条件 ];then
程序
fi
或者
if [ 条件 ]
then
程序
fi
注意事项:if后要有空格;中括号条件两侧要有空格
1.2 case判断
case $变量名 in
"值1")
程序
;;
"值2")
程序
;;
*)
默认程序
;;
esac
1.3 for循环
1. for(( 初始值;条件控制;变量变化 ))
do
程序
done
2. for 变量 in 值1 值2
do
程序
done
1.4 while循环
while [ 条件 ]
do
程序
done
2.read读取控制台输入 -p后跟提示语 -t后跟时间(秒),表示读取几秒内输入的字符;最后参数表示读取的值赋给的变量名
3.系统函数basename string/pathname [suffix] 截取指定路径的文件名,suffix表示去掉指定后缀,suffix为可选项
4.系统函数dirname 文件绝对路径 截取指定路径的目录名
5.自定义函数
基本语法
[ function ] funname[()]
{
Action;
[return int;]--一般用$?判断是否执行成功
}
注意:必须在调用前声明,shell是逐行执行,不是先编译再执行
6.shell分割工具:cut [选项参数] filename,默认分隔符是制表符;
-f 列号,提取第几列,获取多列可以用逗号,例如1,2(还可以从指定列到末尾,例如‘1-’,表示从第1列到末尾);
-d 指定分隔符
该工具可以使用‘|’切割上一个命令的返回值,此时后边不需要跟filename参数
7.shell流编辑工具:sed [选项参数] 'command' filename
常用选项参数:-e 直接在指令列模式上进行sed的动作编辑
常用命令功能:a 新增,a的后面可以接字串,在下一行出现 --sed "2a dyl" file.txt 表示在第2行下边新增dyl(源文件不改变)
d 删除 --sed "/wo/d" file.txt 表示删除包含"wo"的所有行
s 查找并替换 --sed "s/wo/ni/g" file.txt 表示将文件中"wo"替换为"ni","/g"表示全局替换
sed -e "2d" -e "s/wo/ni" 多个命令时要用到-e参数
8.shell文本分析工具:awk [选项参数] '匹配规则1{执行命令1} 匹配规则2{执行命令2}...' filename
常用选项参数:-F 分隔符
-v 用来定义变量
匹配规则:在第一行加字符可以用'BEGIN{}',在末尾行新增一行可以用'END{}'
内置变量:FILENAME 文件名
NR已读的记录数
NF浏览记录的域的个数(相当于切割后,列的个数)
9.shell排序工具:sort(选项)(参数)
常用参数:-n 按照数值大小
-r 倒叙
-t 指定分隔符
-k 指定待排序的列
例:sort -t : -nrk 2 test 表示test文件用':'分割,指定第二列倒叙数值排序
练习
1.体验if语句结构
if [ $1 -eq 1 ];then
echo '1'
elif [ $1 -eq 2 ];then
echo '2'
fi
2.---$*与$@一致;"$*"不同,"$*"表示一个整体;
for i in $*
do
echo $i
done
for i in $@
do
echo $i
done
3.体验自定义函数结构,并调用
function sum()
{
s=$[$1 + $2]
echo $s
}
read -p "input your parameter1:" p1
read -p "input your parameter2:" p2
sum $p1 $p2
4.计算test文件第二列的和并输出(空格分隔)
awk -F ' ' '{sum+=$2} END{print sum}' test