大数据学习-Shell语法及常用命令区别及用法

2.1概述
Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。

2.2 Shell中的变量

  1. $n ( n为数字,$0代表该脚本名称,$1- 9 代表第一到第九个参数,十以上参数 : 9代表第一到第九个参数,十以上参数: 9代表第一到第九个参数,十以上参数:{10})。

  2. $# (获取所有输入参数个数,常用于循环)

  3. ∗ ( 代表命令行中所有的参数, * (代表命令行中所有的参数, (代表命令行中所有的参数,*把所有参数看成一个整体)

  4. @ ( 代表命令行中所有的参数,不过 @ (代表命令行中所有的参数,不过 @(代表命令行中所有的参数,不过@把每个参数区分对待)

$* 和 $@区别在加了“”后的效果不同:

∗ 和 *和 @都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2n的形式输出所有参数。

当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2”n”的形式输出所有参数。

  1. $? (最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果非0(具体哪一个数,由命令自己决定),则证明上一个命令执行不正确)。

2.3 运算符
$((运算式)) 或者 $[运算式]

expr + , -, * , /, % 加,减,乘,除,取余

注意:expr 运算符间要有空格

2.4 条件判断
[ condition ] (注意 condition 前后要有空格)

常用的判断条件:

(1) 两个数之间比较

= 字符串比较 (注意必须加空格,否则就是一个非空字符串,始终返回true)

[ a = b ]

-lt 小于 -le 小于等于 举例 [ 23 -ge 22 ]

-eq 等于 -gt 大于

-ge 大于等于 -ne 不等于

(2) 文件权限判断

-r 有读的权限 eg: [ -w hello.sh ]

-w 有写的权限

-x 有执行的权限

(3) 按照文件类型判断

-f 文件存在并且是一个常规文件 eg [ -f /home/h.txt ]

-e 文件存在

-d 文件存在并是一个目录

(4) 多条判断(&& 表示前一条命令执行成功才会执行后面,|| 表示上一条执行失败后才会执行下一条)

2.5 流程控制
if判断:

if [ 条件判断式 ];then

程序

fi

或者

if [ 条件判断式 ]

then

程序

fi


完整结构

if [条件表达式]

then

程序

elif [条件表达式]

then

程序

else

程序

fi

注意事项:

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

(2)if后要有空格

case语句

case $变量名 in

“值1”)

如果变量的值等于值1,则执行程序1

;;

“值2”)

如果变量的值等于值2,则执行程序2

;;

…省略其他分支…

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac

注意事项:

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

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

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

for循环:

for (( 初始值;循环控制条件;变量变化 ))

do

程序

done

for 变量 in 值1 值2 值3…

do

程序

done

while循环:

while [ 条件判断式 ]

do

程序

done

2.6 Shell工具(重点)
2.6.1 cut
cut [选项参数] filename

默认分隔符是制表符

选项参数:

-f 列号,提取第几列

-d 分隔符,按照指定分隔符分割列

举例:cut -d “ ” -f 2 cut.txt 以空格为分隔符,切割第二列

如果出现 -f 2- 2-表示第二列以后所有的列

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

sed [选项参数] ‘command’ filename

选项参数:

-e 直接在指令列模式上进行sed的动作编辑

命令功能描述:

a : 新增,a的后面可以接字符串,在下一行出现

d:删除

s:查找并替换

举例:sed ‘2a haha’ sed.txt :将haha插入到sed.txt文件第二行下

(注意:这里原本文件并没有改变)

举例:sed ‘/wo/d’ sed.txt : 删除sed.txt文件所有包含wo的行

举例:sed ‘s/wo/ni/g’ sed.txt : 将sed.txt文件中所有wo替换为ni

这里‘g’ 表示全局替换

举例:sed -e ‘2d’ -e ‘s/wo/ni/g’ sed.txt : 将sed.txt文件中的第二行删除并将wo替换为ni

注意:如果执行多条相同的命令,不加-e只会执行一个

2.6.3 awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理.

awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename

pattern:表示awk在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

注意:这里的模式匹配需要使用单引号,因为双引号会对正则的一些特殊符号处理

选项参数:

-f 指定输入文件折分隔符

-v 赋值一个用户定义变量

1)搜索passwd文件以root关键字开头的所有行,使用冒号切分,并输出该行的第7列。

[hadoop102 datas]$ awk -F: ‘/^root/{print $7}’ passwd
/bin/bash
(2)搜索passwd文件以root关键字开头的所有行,使用冒号切分,并输出该行的第1列和第7列,中间以“,”号分割。

[hadoop102 datas]$ awk -F: ‘/^root/{print $1","$7}’ passwd
root,/bin/bash
注意:只有匹配了pattern的行才会执行action

(3)对/etc/passwd用冒号切分后,只显示第一列和第七列,然后以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"lisi,/bin/zuishuai"。

[hadoop102 datas]$ awk -F : ‘BEGIN{print “user, shell”} {print $1","$7} END{print “lisi,/bin/zuishuai”}’ passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
aaaaa,/bin/bash
lisi,/bin/zuishuai
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

(4)将passwd文件中的用户id增加数值1并输出 注意:i取值的时候不需要加$

[hadoop102 datas]$ awk -v i=1 -F: ‘{print $3+i}’ passwd
1
2
3
4
awk的内置变量

变量 说明
FILENAME 文件名
NR 已读的记录数(行数)
NF 浏览记录的域的个数(切割后,列的个数)
Linux:awk与cut命令的区别

awk 以空格为分割域时,是以单个或多个连续的空格为分隔符的;
cut则是以单个空格作为分隔符。

例如:awk -F " " ‘{print $2}’ cut.txt

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

sort(选项)(参数)

选项 说明
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列
参数:指定待排序的文件列表

(1) 按照“:”分割后的第三列倒序排序。

[hadoop100 datas]$ sort -t : -nrk 3 sort.txt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值