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

自我学习使用

  • 前言
  • 一、熟悉常用的脚本语言(以shell作为学习展开)
    • 1.1shell概述
    • 1.2shell解析器
    • 1.3shell脚本入门
    • 1.4shell中的变量
    • 1.5运算符
    • 1.6条件判断
    • 1.7流程控制(重点-if-case-for-while)
    • 1.8read读取控制台输入
    • 1.9函数
    • 1.10shell工具(重点-cut-sed-awk-sort)
    • 1.11面试题(搜到的)
    • shell结语

前言

本人是一个以后想找大数据开发岗的菜鸡
在网上广泛的寻找相关工作资料后不难发现,公司常常需要我们有以下技能:
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 dddecho $?
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)基本语法

[ condition ](注意condition前后要有空格)[chris@hadoop100 ~]$ [ $a = $b ]
[chris@hadoop100 ~]$ echo $?
0
[chris@hadoop100 ~]$ [ $a = 6 ]
[chris@hadoop100 ~]$ echo $?
1
[chris@hadoop100 ~]$ [ $a -eq 5 ]
[chris@hadoop100 ~]$ echo $?
0

(2)常用判断条件

(1)两个整数之间比较
= 字符串比较
-lt 小于(less than)                 -le 小于等于(less equal)
-eq 等于(equal)                     -gt 大于(greater than)
-ge 大于等于(greater equal)         -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read)              -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)          -d 文件存在并是一个目录(directory)[chris@hadoop100 ~]$ [ -x helloworld.sh ]
[chris@hadoop100 ~]$ echo $?
0

1.7流程控制(重点-if-case-for-while)

(1)if判断

if [ 条件判断式 ]
then程序
elif [ 条件判断式 ]
then程序
else程序
fi在a.sh中输入如下内容
#!/bin/bash
if [ $1 -eq 1]
thenecho 11111
elif [ $1 -eq 2]
thenecho 22222
elseecho 33333
fi
运行脚本:
./a.sh 1
显示:
11111

练习

#!/bin/bash
#查看是否存在一个叫做bbbbb的文件,如果不存在,那么就新建一个并输入b作为内容,否则打印文件内容
if [ -f bbbbb ]
thencat bbbbb
elsetouch bbbbbecho b >> bbbbb
fi  ./a.sh

补充(>、>>):

>:覆盖
>>:追加

(2)case语句

case $变量名 in"值1")如果变量的值等于值1,则执行程序1;;"值2")如果变量的值等于值2,则执行程序2;;…省略其他分支…*)如果变量的值都不是以上的值,则执行此程序;;
esac注意事项:
(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于java中的break。
(3)最后的“*)”表示默认模式,相当于java中的default。在a.sh中输入如下内容
#!/bin/bash
case $1 in"1")echo 11111;;"2"echo 22222;;*)echo 33333;;
esac
运行脚本:
./a.sh 1
显示:
11111

(3)for循环

for (( 初始值;循环控制条件;变量变化 ))
do程序
done在a.sh中输入如下内容
#!/bin/bash
#累加1到100
s=0;
for((i=1;i<=100;i++))
dos=$[$s+$i]
done
echo $s
运行脚本:
./a.sh
显示:
5050

shell的增强for

for 变量 in 值1 值2 值3…
do程序
done在a.sh中输入如下内容
#!/bin/bash
for i in aaa bbb ccc
doecho $i
done
运行脚本:
./a.sh
显示:
aaa
bbb
ccc
$*和$@的区别
在a.sh中输入如下内容
#!/bin/bash
for i in "$*"
doecho $i
done  for i in "$@"
doecho $i
done  运行脚本:
./a.sh aaa bbb ccc
显示:
aaa bbb ccc
aaa
bbb
ccc
注意:双引号括起来表示一个整体的意思

(4)while循环

while [ 条件判断式 ]
do程序
done在a.sh中输入如下内容
#!/bin/bash
#累加1到100
s=0;
i=0
while [ $i -le 100]
dos=$[$s+$i]i=$[$i+1]
done
echo $s运行脚本:
./a.sh
显示:
5050

1.8read读取控制台输入

read(选项)(参数)选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。在a.sh中输入如下内容
#!/bin/bash
read -p "请在5秒以内输点东西:" -t 5 i
echo $i运行脚本:
./a.sh
请在5秒以内输点东西:hello
显示:
hello

1.9函数

[ function ] funname[()]
{Action;[return int;]
}
funname在a.sh中输入如下内容
#!/bin/bash
function aaa()
{echo adcd
}
aaa运行脚本:
./a.sh
显示:
abcd

练习

[chris@hadoop100 ~]$ plus()
> {> echo $[$1+$2]
> }
[chris@hadoop100 ~]$ plus 1 2
3
[chris@hadoop100 ~]$ plus()
> {> if [ $# -lt 2 ]
> then echo "参数不足2个"
> exit
> fi
> echo $1 + $2
> }
[chris@hadoop100 ~]$ plus 1 2
1 + 2
[chris@hadoop100 ~]$ plus 1
参数不足2个
logout

注意(return)

shell的return是用来返回状态码的,不是用来返回结果的,示例如下
[chris@hadoop100 ~]$ aaaa()
> {> echo 4a
> return 1
> }
[chris@hadoop100 ~]$ aaaa
4a
[chris@hadoop100 ~]$ echo $?
1
[chris@hadoop100 ~]$ aaaa() { return $1; }
[chris@hadoop100 ~]$ aaaa 255
[chris@hadoop100 ~]$ echo $?
255
[chris@hadoop100 ~]$ aaaa 256
[chris@hadoop100 ~]$ echo $?
0
会溢出,所以shell的return不是用来返回结果的

1.10shell工具(重点-cut-sed-awk-sort)

(1)cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。
cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项参数]  filename
说明:默认分隔符是制表符


截取数据的操作:

[chris@hadoop100 ~]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:6872 errors:0 dropped:0 overruns:0 frame:0TX packets:1406 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:481219 (469.9 KiB)  TX bytes:125529 (122.5 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)[chris@hadoop100 ~]$ ifconfig | grep HWaddr
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00
[chris@hadoop100 ~]$ ifconfig | grep Bcastinet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2
192.168.1.100  Bcast
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -d " " -f 1
192.168.1.100
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -d " " -f 2[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -d " " -f 3
Bcast
[chris@hadoop100 ~]$ man cut (查看cut命令)
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -c 1
1
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -c 2
9
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -c 10
.
[chris@hadoop100 ~]$ ifconfig | grep Bcast | cut -d : -f 2 | cut -c 2-8
192.168.

(2)sed(含正则规则)

sed是一种流编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,
接着用sed命令处理缓冲区中的内容,处理完成后,
把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。

命令操作:

[chris@hadoop100 ~]$ ifconfig | sed '2a123' (第二行后面加一行123)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
123inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:6872 errors:0 dropped:0 overruns:0 frame:0TX packets:1406 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:481219 (469.9 KiB)  TX bytes:125529 (122.5 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
[chris@hadoop100 ~]$ ifconfig | sed '2d' (删除第二行)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:65 errors:0 dropped:0 overruns:0 frame:0TX packets:58 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:7293 (7.1 KiB)  TX bytes:7271 (7.1 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
[chris@hadoop100 ~]$ man sed(查看命令)
[chris@hadoop100 ~]$ ifconfig | sed '/Link/aXXXXXX'(//表示里面要写正则表达式,
该行命令表示在所有包含Link的行的下一行追加XXXXXX)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00
XXXXXXinet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:Link
XXXXXXUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:495 errors:0 dropped:0 overruns:0 frame:0TX packets:132 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:37013 (36.1 KiB)  TX bytes:14791 (14.4 KiB)lo        Link encap:Local Loopback
XXXXXXinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)[chris@hadoop100 ~]$ ifconfig | sed '/Link$/aXXXXXX'(该行命令表示
在所有包含以Link为结尾的行的下一行追加XXXXXX)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:Link
XXXXXXUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:514 errors:0 dropped:0 overruns:0 frame:0TX packets:142 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:38385 (37.4 KiB)  TX bytes:16615 (16.2 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)[chris@hadoop100 ~]$ ifconfig | sed '/^$/aXXXXXX'(该行命令表示
在所有包含空行的下一行追加XXXXXX)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:583 errors:0 dropped:0 overruns:0 frame:0TX packets:171 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:43885 (42.8 KiB)  TX bytes:20777 (20.2 KiB)XXXXXX
lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)XXXXXX
[chris@hadoop100 ~]$ ifconfig | sed '1,3s/inet/XXXX/g'(该行命令
表示替换1到3行中inet字符为XXXX,其中g表示全局替换,有几个就替换几个)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  XXXX addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0XXXX6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:702 errors:0 dropped:0 overruns:0 frame:0TX packets:209 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:52849 (51.6 KiB)  TX bytes:25873 (25.2 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)[chris@hadoop100 ~]$ ifconfig | sed '1,3s/inet[6]* addr/XXXX/g'(该行命令
表示替换1到3行中包含inet addr或者inet6 addr的字符为XXXX,其中[6]*表示任意包含
6的字符串,其中g表示全局替换,有几个就替换几个)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  XXXX:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0XXXX: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:809 errors:0 dropped:0 overruns:0 frame:0TX packets:239 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:61106 (59.6 KiB)  TX bytes:29953 (29.2 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
[chris@hadoop100 ~]$ ifconfig | sed -e '1,3s/192/XXX/g' -e '4,6d'(该行命令
表示替换1到3行中包含192的字符为XXX,其中g表示全局替换,-e表示当有多个操作需要
放在一条sed执行时,可以用-e分别执行操作)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  inet addr:XXX.168.1.100  Bcast:XXX.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:Linkcollisions:0 txqueuelen:1000 RX bytes:78914 (77.0 KiB)  TX bytes:39159 (38.2 KiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
[chris@hadoop100 ~]$ ifconfig > if (该行命令表示将ifconfig的内容输出到一个if文件中)
[chris@hadoop100 ~]$ sed '1,3d' if (该行命令表示将if文件作为源,进行sed处理,
1到3行删除,并将结果输出到屏幕上,注意:if文件源头没有变,文件本身并没有进行更改)
[chris@hadoop100 ~]$ sed  -i '1,3d' if (这时候if文件内容就发生了改变,即文件内容
删除了1到3行)
[chris@hadoop100 ~]$ ifconfig | sed '/Link/,/UP/d'(该行命令
表示删除Link和UP之间的行,sed命令先指定范围再写操作)RX packets:1202 errors:0 dropped:0 overruns:0 frame:0TX packets:368 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:90715 (88.5 KiB)  TX bytes:44479 (43.4 KiB)RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
[chris@hadoop100 ~]$ ifconfig | sed '/Link/,/UP/a123'
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00
123inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
123inet6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:Link
123UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
123RX packets:1263 errors:0 dropped:0 overruns:0 frame:0TX packets:383 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:95148 (92.9 KiB)  TX bytes:46355 (45.2 KiB)lo        Link encap:Local Loopback
123inet addr:127.0.0.1  Mask:255.0.0.0
123inet6 addr: ::1/128 Scope:Host
123UP LOOPBACK RUNNING  MTU:65536  Metric:1
123RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)[chris@hadoop100 ~]$ ifconfig | sed '/Link/,/UP/s/inet/XXX/g'
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:5F:00  XXX addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0XXX6 addr: fe80::20c:29ff:fee9:5f00/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:1321 errors:0 dropped:0 overruns:0 frame:0TX packets:405 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:99913 (97.5 KiB)  TX bytes:49901 (48.7 KiB)lo        Link encap:Local Loopback  XXX addr:127.0.0.1  Mask:255.0.0.0XXX6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)


补充(能够写出90%的正则表达式的正则规则):

\   转义,$本身是匹配一行的结束,如果想匹配$这个字符串,即"$",需要转义字符反斜杠,\$
^   一行的开头^R------表示以R开头的行
$   匹配一行的结束R$表示以R结尾的行
*   表示上一个子式匹配0次或多次,贪心匹配Zo*-----ZZoZooo
.   匹配一个任意的字符.*匹配任意字符串
[]  表示匹配某个范围内的字符[a-z]------匹配一个a-z之间的字符[a-z]*-----匹配任意字母字符串

(3)awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,
切开的部分再进行分析处理。
awk [选项参数] ‘pattern1{action1}  pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令


命令操作:

[chris@hadoop100 chrisdata]$ cp /etc/passwd /opt/chrisdata/
[chris@hadoop100 chrisdata]$ ll
总用量 1901680
-rw-rw-r--  1 chris chris 1947283562 12月  3 19:37 BusData.csv
-rw-rw-r--. 1 chris chris         71 3月  30 2020 dept.txt
-rw-rw-r--. 1 chris chris        656 3月  30 2020 emp.txt
-rw-r--r--  1 chris chris       1554 1月  12 09:52 passwd
-rw-rw-r--. 1 chris chris        165 3月  30 2020 student.txt
[chris@hadoop100 chrisdata]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mysql:x:496:493:MySQL server:/var/lib/mysql:/bin/bash
chris:x:500:500::/home/chris:/bin/bash
ganglia:x:495:492:Ganglia Monitoring System:/var/lib/ganglia:/sbin/nologin
[chris@hadoop100 chrisdata]$ cat passwd | awk '/^nobody/{print}'
nobody:x:99:99:Nobody:/:/sbin/nologin
[chris@hadoop100 chrisdata]$ cat passwd | awk '/^nobody/{print} /^chris/{print}'
nobody:x:99:99:Nobody:/:/sbin/nologin
chris:x:500:500::/home/chris:/bin/bash
[chris@hadoop100 chrisdata]$ cat passwd | awk '/^nobody/{print} /^chris/{print "666"}'
nobody:x:99:99:Nobody:/:/sbin/nologin
666
[chris@hadoop100 chrisdata]$ cat passwd | awk '/^c/{print} /^chris/{print "666"}'
chris:x:500:500::/home/chris:/bin/bash
666
[chris@hadoop100 chrisdata]$ cat passwd | awk -F : '/^chris/{print $1}'(该行命令
表示将:分割以chris开头的那行并打印第一段)
chris
[chris@hadoop100 chrisdata]$ cat passwd | awk -F : 'BEGIN{sum=0}{sum+=$3}END{print sum}'
(该行命令表示在开始定义sum=0,取出第三列累加,最后打印出累加结果)
4217
[chris@hadoop100 chrisdata]$ cat passwd | awk -F : 'BEGIN{sum=0}{sum+=$3;print $3" "sum}END{print "sum="sum}'
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
10 46
11 57
12 69
13 82
14 96
99 195
81 276
113 389
499 888
170 1058
69 1127
173 1300
68 1368
38 1406
48 1454
498 1952
89 2041
42 2083
497 2580
74 2654
72 2726
496 3222
500 3722
495 4217
sum=4217
[chris@hadoop100 chrisdata]$ cat passwd | awk -F : -v sum=0 '{sum+=$3;print $3" "sum}END{print "sum="sum}'
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
10 46
11 57
12 69
13 82
14 96
99 195
81 276
113 389
499 888
170 1058
69 1127
173 1300
68 1368
38 1406
48 1454
498 1952
89 2041
42 2083
497 2580
74 2654
72 2726
496 3222
500 3722
495 4217
sum=4217


命令操作:

[chris@hadoop100 chrisdata]$ awk -F : '{print "Filename="FILENAME",NF="NF",NR="NR}' passwd
Filename=passwd,NF=7,NR=1
Filename=passwd,NF=7,NR=2
Filename=passwd,NF=7,NR=3
Filename=passwd,NF=7,NR=4
Filename=passwd,NF=7,NR=5
Filename=passwd,NF=7,NR=6
Filename=passwd,NF=7,NR=7
Filename=passwd,NF=7,NR=8
Filename=passwd,NF=7,NR=9
Filename=passwd,NF=7,NR=10
Filename=passwd,NF=7,NR=11
Filename=passwd,NF=7,NR=12
Filename=passwd,NF=7,NR=13
Filename=passwd,NF=7,NR=14
Filename=passwd,NF=7,NR=15
Filename=passwd,NF=7,NR=16
Filename=passwd,NF=7,NR=17
Filename=passwd,NF=7,NR=18
Filename=passwd,NF=7,NR=19
Filename=passwd,NF=7,NR=20
Filename=passwd,NF=7,NR=21
Filename=passwd,NF=7,NR=22
Filename=passwd,NF=7,NR=23
Filename=passwd,NF=7,NR=24
Filename=passwd,NF=7,NR=25
Filename=passwd,NF=7,NR=26
Filename=passwd,NF=7,NR=27
Filename=passwd,NF=7,NR=28
Filename=passwd,NF=7,NR=29
Filename=passwd,NF=7,NR=30
Filename=passwd,NF=7,NR=31
Filename=passwd,NF=7,NR=32
Filename=passwd,NF=7,NR=33

练习(以a开头的第三列累加起来):

[chris@hadoop100 chrisdata]$ cat passwd | awk -F : 'BEGIN{sum=0} /^a/{print;sum+=$3} END{print sum}'
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
394

(4)sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
sort(选项)(参数)


命令操作:

[chris@hadoop100 chrisdata]$ cat passwd | grep ^a
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
[chris@hadoop100 chrisdata]$ cat passwd | grep ^a | sort -t : -k 3(按照第三列的
第一位开始比较排序)
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
[chris@hadoop100 chrisdata]$ cat passwd | grep ^a | sort -t : -k 3 -n(只能找第三列的
数值大小进行排序)
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

1.11面试题(搜到的)

shell结语

我不管反正现在我熟悉了shell脚本语言,奸笑.jpg。

(一)大数据学习之shell脚本相关推荐

  1. 大数据学习,涉及的知识点

    大数据技术都包括哪些,如何学习大数据技术.首先我们要了解Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后. 很多初学者,对大数据的概念都是模糊不清的,大数据是什么,能做什 ...

  2. 大数据学习规划(新手入门)

    前言: 一.背景介绍 二.大数据介绍 正文: 一.大数据相关的工作介绍 二.大数据工程师的技能要求 三.大数据学习规划 四.持续学习资源推荐(书籍,博客,网站) 五.项目案例分析(批处理+实时处理) ...

  3. 大数据学习笔记:Hadoop生态系统

    文章目录 一.Hadoop是什么 二.Hadoop生态系统图 三.Hadoop生态圈常用组件 (一)Hadoop (二)HDFS (三)MapReduce (四)Hive (五)Hbase (六)Zo ...

  4. 大数据学习路线2019版(附全套视频教程及网盘下载)

    什么是大数据? 大数据(BIG DATA)是指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的 ...

  5. 大数据学习路线详解,零基础学大数据学习路线

    在大数据蓬勃发展的现今,大家都看到了大数据未来不可限量的发展前景,跟着科技发展的潮流,不断学习新的技术知识,科多大数据相信,成为人生赢家不在话下. 大数据的三个发展方向,平台搭建/优化/运维/监控.大 ...

  6. 2022最全大数据学习路线(建议收藏)

    [不要错过文末彩蛋] 申明: 本文旨在为[大数据自学者|大数据专业学生|工资低的程序员(Java/Python等)]提供一个从入门到入职的的大数据技术学习路径,不适合5年以上大数据工程师的进阶学习. ...

  7. 大数据学习路线图(2023完整版)适合收藏

    大数据开发是一门涉及处理和分析大规模数据的技术领域,随着大数据技术的不断发展和应用,对大数据开发人员的需求也在逐渐增加.就业前景相对较好,尤其在科技行业和数据驱动型企业中.大数据开发的前景还是有很多优 ...

  8. 完整的大数据知识体系,大数据学习路线图

    任何学习过程都需要一个科学合理的学习路线,才能够有条不紊的完成我们的学习目标.大数据所需学习的内容纷繁复杂,难度较大,有一个合理的大数据学习路线图帮忙理清思路就显得尤为必要. 一.Java语言以jav ...

  9. 2019年最全的大数据学习大纲总结,持续更新.....

    一,题记 要说当下IT行业什么最火?ABC无出其右.所谓ABC者,AI + Big Data + Cloud也,即人工智能.大数据和云计算(云平台).每个领域目前都有行业领袖在引领前行,今天我们来讨论 ...

最新文章

  1. 因用了Insert into select语句,美女同事被开除了!
  2. 【每周CV论文推荐】换脸算法都有哪些经典的思路?
  3. Linux Tomcat 安装
  4. 郊游 ID:PICNIC
  5. 解决Jenkins的job启动tomcat时会在job结束时关闭问题
  6. MAVEN 私有仓库库迁移
  7. 减去字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)
  8. 9.Maven之(九)依赖关系
  9. 李昌镐究竟是不是神?
  10. Atitit webservice之道 艾提拉著 目录 1. 基本说明Web Service 1 2. 基本概念与内部构成 2 2.1. Web services要使用两种技术: XML SOAP
  11. drupal 7宝典_为Drupal 7建立新主题
  12. cold diffusion的个人理解
  13. vim全局搜索当前目录
  14. 如何在WinXP下查看软硬件端口的占用情况
  15. matlab中regress函数教程,regress()函数
  16. python中ipo模型有,python ipo模型是指什么?-Python教程
  17. oracle电子商务套件使用手册,甲骨文电子商务套件操作.pdf
  18. 喜报丨驭势科技荣获工信部人工智能产业创新揭榜优胜单位
  19. 学校机房计算机缺陷,学校机房管理系统维护四种方法
  20. GraphX入门介绍

热门文章

  1. hipaa_构建符合HIPAA的服务。
  2. vue 天气插件的使用
  3. MongoDB安装教程(Win10Linux)
  4. 计算机技术含量,有哪些看似简单却技术含量高的操作?
  5. [渝粤教育] 新乡医学院 大学生心理健康教育 参考 资料
  6. 双出口NAT+PBR+IPSec V*N
  7. spring源码分析系列(一)
  8. 冬瓜哥对时间和空间的理解方式—时空参悟(下)
  9. 秀!学妹看见都惊呆的 Python 小项目!【界面应用项目及游戏开发】
  10. 西行漫记(17):Holi-Day