大数据技术之Shell工具详解

前言

​ 也许漫漫长夜里带给你温暖的恰恰是那不会动情亦不会改变的代码。

​ —–2021年10月29日21:44:06

正文

整体思维导图

image-20211029214511788

Shell 概述

  1. shell是一个命令行解释器,接受应用程序/用户命令,然后调用操作系统内核。
    
  2. shell是一门解释性语言,不需要解释器解释就能运行。
    
  3. java是一门编译性语言,需要解释器解释之后才能运行。
    

脚本入门

须知:

  1. /bin下的bash就是shell存放的位置。
  2. 一般脚本文件以sh作为后缀出现。
  3. 文件头最好加上 #!/bin/bash

运行方式

  1. bash 文件名
  2. sh 文件名
  3. 将文件设置为可执行,然后./文件名

变量

思维导图

image-20211029220054023

系统预定义变量

常用系统变量

H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等

image-20211029221017973
自定义变量
语法
定义:变量=值
撤销:unset 变量
声明静态变量:readonly 变量        (!!!注意不能unset)
定义规则
  • 名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写.

  • 等号两侧不能有空格。

  • 在bash中,变量默认类型都是字符串类型

  • 变量的值如果有空格,需要使用双引号或者单引号将该变量括起来

  • 当需要其他shell程序使用该变量时可以把变量提升为全局环境变——export 变量名

特殊变量
$n
功能描述
n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
注意
n用具体的数字表示。
作用是获取第1到n个参数。
在运行脚本的命令后面添加参数,用空格隔开。
示例

1.vim testn.sh —> 输入以下内容

image-20211029223651461

2.bash testn.sh 1 2 3

3.结果为:

image-20211029223909951

$#
功能描述
获取参数个数。
一般用于循环。
示例

在testn.sh中加入

image-20211029224631459

再次运行上一条语句:bash testn.sh 1 2 3

结果为:

image-20211029224717406

$*
功能描述
代表命令行中所有的参数,它把所有的参数看成一个整体。
示例

在testn.sh中加入image-20211029225820121

再次运行上一条语句:bash testn.sh 1 2 3

结果为:image-20211029225902031

$@
功能描述
也代表命令行中所有的参数,不过$@把每个参数区别对待。
示例

在文件中加入了image-20211029230302766

再次运行上一条语句:bash testn.sh 1 2 3

结果为:image-20211029230427357

以上两个特殊变量在使用循环时使用双引号括起来才会体现不同的效果。
$?
功能描述
获取上一条语句的运行状态(0则运行成功,非0则运行失败)
示例

image-20211029230950082

运算符

基本语法

$((运算式)) 或 $[运算式]

示例

image-20211029231533560

条件判断

基本语法

  • test condition

  • [ condition ] (注意condition前后要有空格)

    注意:条件非空即为true,[]返回false。支持多条件判断,通过与或非。

常用判断条件

(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)

示例

image-20211029232637649

image-20211029232647184

image-20211029232724054

流程控制

if 判断

基本语法
if [ 条件判断式 ]
    then
      程序
elif [ 条件判断式 ]
    then
      程序
else 
    程序
fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

示例

输入一个数字,如果是1,则输出yxpzuishuai,如果是2,则输出lxzzhenmei,如果是其它,什么也不输出。

vim testif.sh –>

image-20211029233618386

bash testif.sh 2

结果为:

image-20211029233644242

bash testif.sh 1

结果为:

image-20211029233701523

case 语句

基本语法
case $变量名 in
    值1)
    	程序1
    	;;2)
     	程序2
        ;;
......省略其他分支.....
    *)
    	默认程序
    ;;
esac

注意事项:

(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“****;;****”表示命令序列结束,相当于java中的break。

(3)最后的“*)”表示默认模式,相当于java中的default。

示例

image-20211029234329804

image-20211029234345065

for循环

基本语法
1.
for ((初始值;循环控制条件;变量变化))
    do
        程序
        done
2.
for 变量 in 值123 ..
    do
        程序
        done
示例

一、

image-20211030000022997

image-20211030000043810

二、

image-20211030000408412

image-20211030000357913

read 读取控制台输入

基本语法
read(选项)(参数)
    选项:
    	-p:指定读取值时的提示符;
    	-t:指定读取值时等待的时间(秒)、
    参数:
        变量:指定读取值的变量名
示例

image-20211030101742822

函数

系统函数

basename
基本语法
basename 路径名
作用
显示文件名
示例

image-20211030102151957

dirname
基本语法
dirname 路径名
作用
显示目录路径
示例

image-20211030102436601

自定义函数

基本语法
定义函数
[function] funname[()]{
    Action;
    [return int;]
}
调用函数
funname
简化定义函数
function funname{
    Action;
    return int;
}
注意事项
1.必须在调用函数的地方之前,先声明函数,shell脚本是逐行运行,不会像其他语言一样先编译,
   。
2.函数返回值只能通过$?系统变量获得,可以显示加:return 返回,如果不加将以最后一条命令运行结果,作为返回值,return后跟数值n(0-255
示例

计算两个输入参数的和

image-20211030104918971

正则表达式入门

概述

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
在Linux中,grep,sed,awk等命令都支持通过正则表达式进行模式匹配。

常规匹配

一串不包含特殊字符的正则.表达式匹配它自己。例如:cat /etc/passwd | grep yxp
就会匹配所有包含yxp的行

常用特殊字符

字符描述示例
^匹配一行的开头image-20211030112902734
$匹配一行的结尾image-20211030113323788
.匹配一个任意的字符image-20211030113713941
*不单独使用,他和左边第一个字符连用,表示匹配上一个字符0次或多次image-20211030114131868
[]表示匹配某个范围内的一个字符image-20211030114336657
\表示转义,将转义字符和特殊字符连用,来表示特殊字符本身cat /etc/passwd就会匹配所有包含 a$b 的行。

Shell工具

cut

概述
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。
cut命令从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段输出。
基本用法
cut[选项参数] filename
选项参数说明
选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列(默认分隔符是制表符)
-c指定具体的字符
示例

image-20211030142617093

awk

概述
一个强大的文本分析工具,把文件逐行的读入,
以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
基本用法
awk[选项参数] 'pattern1{action1} pattern2{action2}...' filename

pattern: 表示awk在数据中查找的内容,就是匹配模式
action: 在找到匹配内容时所执行的一系列命令
选项参数说明
选项参数功能
-F指定输入文件的分隔符
-v赋值一个用户定义变量
示例

image-20211030144045287

awk的内置变量
变量说明
FILENAME文件名
NR已读的记录数(行数)
NF浏览记录的域的个数(切割后,列的个数)
示例

统计passwd文件名,每行的行号,每行的列数。

image-20211030144619729

sort

概述
sort命令是在Linux'里非常游泳,它将文件进行排序,并将排序结果标准输出。
基本语法
sort(选项)(参数)
选项说明
-n依照数值的大小排序
-r以相反的顺序来排序
-t设置排序时所用的分隔字符
-k指定需要排序的列

参数:指定待排序的文件列表

示例

image-20211030145126843

awk的内置变量
变量说明
FILENAME文件名
NR已读的记录数(行数)
NF浏览记录的域的个数(切割后,列的个数)
示例

统计passwd文件名,每行的行号,每行的列数。

image-20211030144619729

sort

概述
sort命令是在Linux'里非常游泳,它将文件进行排序,并将排序结果标准输出。
基本语法
sort(选项)(参数)
选项说明
-n依照数值的大小排序
-r以相反的顺序来排序
-t设置排序时所用的分隔字符
-k指定需要排序的列

参数:指定待排序的文件列表

示例

image-20211030144619729

结言

无聊的时候居然自觉地开始学习了,奇怪,我咋啦?

​ –2021年10月30日14:55:30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值