(一)大数据学习之shell脚本

本文是作者作为大数据开发初学者的学习笔记,主要聚焦于shell脚本的介绍,包括shell概述、解析器、脚本入门、变量、运算符、条件判断、流程控制、读取输入、函数以及常用的shell工具如cut、sed、awk和sort。内容涵盖基础到进阶,适合入门学习和面试准备。
摘要由CSDN通过智能技术生成

一个菜鸡的学习、找工作的学习过程


前言

本人是一个以后想找大数据开发岗的菜鸡
在网上广泛的寻找相关工作资料后不难发现,公司常常需要我们有以下技能:
1.扎实的SQL基础,熟练掌握Hive SQL;
2.熟悉Linux/Unix平台上的Python、Java语言编程,熟悉常用的脚本语言;
3.熟悉大数据编程技术包括但不限于:Hadoop、Hive、Spark等;
(我想应当还有:HDFS、Yarn、MapReudece、HBase、Kafka、Flume、Redis、Sqoop);
4.熟悉数据仓库理论方法及ETL相关技术;
5.熟悉常用数据结构与算法;
6.具有机器学习和数据挖掘领域的理论背景和实战经验者优先;


提示:下面是一些学习后的总结资料供自己和大家参考

一、熟悉常用的脚本语言(以shell作为学习展开)

Presentation

你对脚本语言有什么了解?
自我总结:我对脚本的理解,他可以理解为一个命令行的集合,将命令行的集合写在一个文件中。

1.1shell概述

Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。
补充(shell概念补充及linux的发行本):

(1)Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,
是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
(2)linux发行的主要三大版本:
--Debian系列:Ubuntu、Knopix;
--Slackware系列:Suse、Opensuse;
--Redhat系列:Centos、Fedora;

1.2shell解析器

(1)Linux提供的Shell解析器有:

[atguigu@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

(2)bash和sh的关系:

[atguigu@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月  11 2016 bash
lrwxrwxrwx. 1 root root      4 5月  27 2017 sh -> bash

补充(->的含义):

(1)->:在linux命令中是软链接的意思,放在windows里就是快捷键的意思,
则sh -> bash,表示bash向下兼容sh,sh是bash的快捷方式,sh已经是历史的残渣,一般用bash;

(3)Centos默认的解析器是bash:

[atguigu@hadoop102 bin]$ echo $SHELL
/bin/bash

补充(ubuntu的默认解释器是dash):

(1)在ubuntu中敲echo $SHELL,出来/bin/dash,表示ubuntu的默认解释器是dash;

1.3shell脚本入门

(1)脚本的概念

简单理解:将多条命令命令写进一个文件里面,这行文件就叫做脚本,即命令行的集合。

(2)创建并运用

vim a.sh
在a.sh中输入如下内容
#!/bin/bash
mkdir a
cd a
touch b

运行脚本:
bash a.sh

补充(脚本内容含义):

(1)bash a.sh实际上是a.sh脚本作为参数传给了/bin/bash
(2)#!/bin/bash第一行指明脚本解释器

脚本helloworld案例

touch helloworld.sh
vi helloworld.sh
 
在helloworld.sh中输入如下内容
#!/bin/bash
echo "helloworld"

运行脚本:
bash helloworld.sh
显示:
helloworld

(3)脚本的常用执行方式

(1)第一种:bash helloworld.sh 
(2)第二种:直接执行./helloworld.sh 
区别:
-第一种执行方式告诉了解析器是bash,只需要bash有执行权限,
所以脚本helloworld.sh里面的第一行,#!/bin/bash是一行注释;
-第二种执行方式没有告诉我们解析器,需要脚本helloworld本身有执行权限
所以脚本helloworld.sh里面的第一行,#!/bin/bash不是一行注释。

补充1(linux中的权限):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)文件类型:d代表目录文件、-代表文件、l代表软链接;
(2)属主权限:chmod u-x helloworld.sh 表示属主不能执行该文件;
(3)属组权限:chmod g+w helloworld.sh 表示属组可以写该文件;
(4)其他用户权限:chmod o-r helloworld.sh 表示其他用户不可以读该文件;

chmod 777 helloworld.sh 表示r=4、w=2、x=1、rwx=4+2+1=7

补充2(解释器改成python的演示):

which python
/usr/bin/python

在helloworld.sh中输入如下内容
#!/usr/bin/python
print("helloworld")

运行脚本:
./helloworld.sh
显示:
helloworld

1.4shell中的变量

(1)系统预定义的变量

[chris@hadoop100 ~]$ echo $USER
chris
[chris@hadoop100 ~]$ echo $HOME
/home/chris
[chris@hadoop100 ~]$ echo $PWD
/home/chris
[chris@hadoop100 ~]$ echo $SHELL
/bin/bash

(2)变量的定义、输出、撤销、静态变量

(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
[chris@hadoop100 ~]$ i=0
[chris@hadoop100 ~]$ echo $SHELL
/bin/bash
[chris@hadoop100 ~]$ echo $i
0
[chris@hadoop100 ~]$ a=1
[chris@hadoop100 ~]$ b=2
[chris@hadoop100 ~]$ echo $a+$b
1+2
[chris@hadoop100 ~]$ unset i;
[chris@hadoop100 ~]$ echo $i

[chris@hadoop100 ~]$ readonly i=5
[chris@hadoop100 ~]$ echo $i
5
[chris@hadoop100 ~]$ i=6
-bash: i: readonly variable
[chris@hadoop100 ~]$ unset i
-bash: unset: i: cannot unset: readonly variable

补充(查看Linux的进程):

ps -ef

(3)特殊变量

$n、$#、$*、$@、$?
(1)$n:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,
十以上的参数需要用大括号包含,如${10}
(2)$#:获取所有输入参数个数,常用于循环。
(3)$*$@:$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体,
$@这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。
(4)$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

[atguigu@hadoop101 datas]$ touch parameter.sh
[atguigu@hadoop101 datas]$ vim parameter.sh
 
在parameter.sh中输入如下内容 
#!/bin/bash
echo $1 $2 $3 
echo '$#'=$#
echo '$*'=$*
echo '$@'=$@

运行脚本:
./parameter.sh aaa bbb ccc ddd
显示:
aaa bbb ccc
$#=4    
$*=aaa bbb ccc ddd
$@=aaa bbb ccc ddd

echo $?
0

1.5运算符

(1)运算式

$((运算式))”或“$[运算式]
[chris@hadoop100 ~]$ a=5
[chris@hadoop100 ~]$ b=5
[chris@hadoop100 ~]$ echo $[$a+$b]
10
[chris@hadoop100 ~]$ echo $(($a+$b))
10

(2) 加,减,乘,除,取余
注意:expr运算符间要有空格

expr  + , - , \*,  /,  %    加,减,乘,除,取余
[chris@hadoop100 ~]$ expr $a + $b
10

1.6条件判断

(1)基本语法

大数据开发中,可以使用shell脚本来完成一些自动化的任务,例如数据的抽取、转换、加载等。下面是一个示例的大数据开发shell脚本: ```bash #!/bin/bash # 设置变量 input_dir="/path/to/input" output_dir="/path/to/output" log_file="/path/to/logs" # 创建输出目录 mkdir -p $output_dir # 执行数据抽取 echo "开始数据抽取..." hadoop jar /path/to/extract.jar $input_dir $output_dir > $log_file 2>&1 # 检查抽取结果 if [ $? -eq 0 ]; then echo "数据抽取完成!" else echo "数据抽取失败,请查看日志文件:$log_file" exit 1 fi # 执行数据转换 echo "开始数据转换..." spark-submit --class com.example.transform /path/to/transform.jar $output_dir > $log_file 2>&1 # 检查转换结果 if [ $? -eq 0 ]; then echo "数据转换完成!" else echo "数据转换失败,请查看日志文件:$log_file" exit 1 fi # 执行数据加载 echo "开始数据加载..." hadoop jar /path/to/load.jar $output_dir > $log_file 2>&1 # 检查加载结果 if [ $? -eq 0 ]; then echo "数据加载完成!" else echo "数据加载失败,请查看日志文件:$log_file" exit 1 fi echo "所有任务完成!" ``` 这个示例脚本通过hadoop jar命令执行数据的抽取和加载,通过spark-submit命令执行数据的转换。脚本中使用了变量来设置输入目录、输出目录和日志文件路径,你可以根据实际情况进行修改。同时,脚本中使用了条件判断来检查任务的执行结果,如果任务失败,则会打印错误信息并退出脚本。最后,脚本会输出所有任务完成的提示信息。 请注意,这只是一个示例脚本,实际使用时需要根据具体的需求和环境进行修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值