【Shell】Shell入门解析

一、Shell概述

为什么要学习Shell呢?

  • 1)需要看懂运维人员编写的Shell程序
  • 2)编写一些简单Shell程序来管理集群、提高开发效率

Shell解析器

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

cat /etc/shells 

/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

2)bash和sh的关系
sh 是 bash的软连接

3)Centos默认的解析器是bash

echo $SHELL

/bin/bash

二、Shell使用

【1】脚本格式

脚本以 #!/bin/bash 开头(指定解析器)

【2】第一个Shell脚本:helloworld.sh

(1)vim helloworld.sh
在这里插入图片描述
(2)脚本执行

第一种:采用 bash/sh + 脚本的相对路径或绝对路径(不用赋予脚本+x权限)
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限
在这里插入图片描述
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x
第二种执行方法,本质是脚本需要自己执行,所以需要执行权限
在这里插入图片描述

【3】Shell中的变量

1、系统变量

常用系统变量

$HOME、$PWD、$SHELL、$USER等

在这里插入图片描述
显示当前Shell中所有变量

set

在这里插入图片描述

2、自定义变量

1、基本语法
(1)定义变量:变量=值
在这里插入图片描述
(2)撤销变量:unset 变量
在这里插入图片描述
(3)声明静态变量:readonly变量,注意:不能unset
在这里插入图片描述
(4)将变量提升为全局环境变量,可供其他Shell程序使用
在这里插入图片描述

2、变量定义规则

  • (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
  • (2)等号两侧不能有空格
  • (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
  • (4)变量的值如果有空格,需要使用双引号或单引号括起来
3、特殊变量

命令:$n

作用:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}

在这里插入图片描述


命令:$#

作用:获取所有输入参数个数,常用于循环

在这里插入图片描述


命令:$*

作用:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

在这里插入图片描述


命令:$@

作用:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
在这里插入图片描述


命令:$?

作用:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
在这里插入图片描述

4、运算符

基本语法
(1)方式1

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

在这里插入图片描述
在这里插入图片描述
(2)方式2

expr  + , - , \*,  /,  %  

在这里插入图片描述

5、条件判断

基本语法

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

注意:条件非空即为true,[ test ] 返回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)

案例实操
在这里插入图片描述

6、流程控制

if 判断

基本语法

if [ 条件判断式 ];then 
  程序 
else
  程序 
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

7、read读取控制台输入

基本语法
read(选项)(参数)

选项:
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒)

参数

  • 变量:指定读取值的变量名
#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME
8、函数

系统函数

basename 基本语法

basename [string / pathname] [suffix]  	

作用:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来

选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

在这里插入图片描述


dirname基本语法
dirname 文件绝对路径
作用:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
在这里插入图片描述

自定义函数

基本语法

[ function ] funname[()]
{
	Action;
	[return int;]
}
funname

在这里插入图片描述

9、cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出

基本用法

命令:cut [选项参数] filename

说明:默认分隔符是制表符

选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列

示例:
1)准备数据

vim cut.txt

hello spark
hello scala flink
hadoop hive
hbase

2)实战
在这里插入图片描述
在这里插入图片描述

10、sed

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

基本用法

命令:sed [选项参数] ‘command’ filename

选项参数说明

选项参数 功能
-e 直接在指令列模式上进行sed的动作编辑

命令功能描述

选项参数 功能
a 新增,a的后面可以接字串,在下一行出现
d 删除
s 查找并替换

示例:
1)准备数据

vim sed.txt 
hello spark scala
hadoop hive hbase
kafka flume azkaban

2)实战
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11、awk

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

基本用法

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

pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

选项参数说明

选项参数 功能
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量

示例:
1)准备数据

vim awk.txt 
hello spark scala
hadoop hive hbase
kafka flume azkaban

2)实战
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

awk的内置变量

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12、sort

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

基本用法

命令:sort(选项)(参数)

选项:

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

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

示例:
1)准备数据

vim sort.txt 

a:1:d
b:2:a
c:4:b
d:3:c

2)实战
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43733123/article/details/106507473