Shell编程-JAVA大数据-Week5-DAY3-linux


前言


2.5 Shell编程

2.5.1. 概述

Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。
Shell 既是一种命令语言,又是一种程序设计语言。
Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释
器就可以了。
Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell解释器,可以通过 cat /etc/shells 命令查
看系统中安装的 shell解释器。
Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
可以以下方式查看Shell解释器:

在这里插入图片描述

2.5.2. HelloWorld

(1)创建/export/exec01.sh
在这里插入图片描述

(2)赋予可执行权限
在这里插入图片描述

(3)执行脚本
在这里插入图片描述

执行方式一和二中 ,sh是bash的快捷方式

执行方式三可以执行,是因为在环境变量PATH中已经配置了/bin目录,所以可以直接到/bin目录下查找

相关命令

2.5.3. 变量

2.5.3.1. 变量规则

变量名称没有任何修饰符
变量名和等号之间,等号和初始化值之间不能有空格
变量名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用 bash 里的关键字(可用help命令查看保留关键字)
赋值方式可以直接赋值,也可以把某命令执行结果赋值给变量

在这里插入图片描述

以上语句会把"/export"下的文件名称一一列出

语句中使用的"`"是反单引号

2.5.3.2. 使用变量

使用**$**引用已定义变量

在这里插入图片描述

使用${变量名}的方式来引用已定义变量,通常情况下{}可省;但如果使用{}是为了定义变量边界,则{}不

可省
在这里插入图片描述

以上程序中{}不可省,其是为了指明引用skill变量,而不是skillScript

重新定义变量

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

重新定义变量时不要加 符 号 , 只 有 使 用 变 量 时 才 加 符号,只有使用变量时才加 使符号

2.5.3.3. 删除变量

使用 unset 命令可以删除变量
在这里插入图片描述

2.5.3.4. 常量

变量一旦被赋值,就不可再改变其值

使用readonly修饰,可以变量改变为常量

在这里插入图片描述

2.5.4. 字符串

2.5.4.1. 字符串的定义和使用

字符串是shell编程中最常用数据类型,定义字符串可以使用单引号、双引号、也可以不使用引号

使用单引号

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符

串拼接使用

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

使用双引号

双引号里可以引用变量

双引号里可以出现转义字符
在这里插入图片描述

2.5.4.2. 字符串常见功能

获取字符串长度
在这里插入图片描述

截取字符串子串

从第2个字符开始截取,截取到字符串末尾
在这里插入图片描述

从第2个字符开始截取,截取2个字符

在这里插入图片描述

查找子串

查找字符串中is的位置
在这里插入图片描述

2.5.5. 传递参数

我们在执行shell脚本时,可以向shell脚本中传递参数,在shell脚本中使用这些传入的参数

使用方式:

./exec01.sh 参数01 参数02 …

脚本内获取参数的格式为:$n

n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
在这里插入图片描述

使用特殊字符来处理参数接收:

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

其中 ∗ 和 *和 @的区别:

∗ 会 把 接 收 到 的 参 数 " a b " 作 为 一 个 参 数 使 用 , 而 *会把接收到的参数"a b"作为一个参数使用,而 "ab"使@会把接收到的参数"a" "b"作为两个参数接收

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

**2.5.6.**算术运算符

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。

原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

使用expr表达式时要注意:

操作数和运算符之间要有空格 ,例如 2 + 2 ,而不能写成2+2

完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边

在这里插入图片描述

常用算术运算符说明:

在这里插入图片描述

**注意:**条件表达式要放在方括号之间,并且操作数和运算符之间要有空格,例如: [ a = = a== a==b] 是错误的,

必须写成 [ $a == $b ]

在这里插入图片描述

2.5.7. 程序流程

2.5.7.1. 条件分支结构

2.5.7.1.1. if****条件分支

常用的判定条件运算符:

只支持数字,不支持字符串,除非字符串的值是数字

在这里插入图片描述

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

运行结果如下:

在这里插入图片描述

2.5.7.1.2. case****条件分支

用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令

执行流程说明:

取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一

模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果

无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

在这里插入图片描述

2.5.7.2. 循环结构

2.5.7.2.1. for****循环

使用循环遍历1-5
在这里插入图片描述

使用循环遍历1-5中的奇数

在这里插入图片描述

使用遍历访问"/export"目录下的内容

在这里插入图片描述

2.5.7.2.2. while****循环

输出1-10的和值

在这里插入图片描述

2.5.7.2.3. 无限循环

每隔1秒,输出当前系统时间

在这里插入图片描述

2.5.7.2.4. breakcontinue

break

直接提出所有循环

使用无限循环输出系统时间,每隔一秒输出一次,使用break控制只输出10次

在这里插入图片描述

continue

仅跳出当前次循环

遍历输出1-20,跳过3的倍数

在这里插入图片描述

2.5.8. 函数

2.5.8.1. 入门例子

在这里插入图片描述

2.5.8.2. 函数传参

调用函数时可以向其传递参数;在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个

参数,$2表示第二个参数…

注意: 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10 不能获取第十个参数,获取第十个参数需要 10{10}。当n>=10时,需要使用${n}来获取参数。

在这里插入图片描述

在这里插入图片描述

2.5.8.3. 函数返回值

在这里插入图片描述

2.5.8.4. 特殊参数说明

特殊参数处理说明:
在这里插入图片描述

2.5.9. 数组

2.5.9.1. 特点

bash中的数组只支持一维数组

初始化时不需要定义数组大小

数组元素的下标由0开始

用括号来表示,元素用"空格"符号分割开

2.5.9.2. 读取数组

使用下标读取数组中某一个元素
在这里插入图片描述

读取数组全部元素
在这里插入图片描述

读取数组长度
在这里插入图片描述

2.5.9.3. 修改数组

修改数组第一个元素值为2

在这里插入图片描述

2.5.9.4. 遍历数组

在这里插入图片描述

在这里插入图片描述

2.5.10. 引用其它文件变量

在某shell脚本中是可以使用其它脚本中变量,需要先引入其它脚本

引入其它脚本方式

. 其它脚本名称 或者 source 其它脚本名称

脚本exec11.sh:

在这里插入图片描述

脚本exec12.sh:

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


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调的小哥哥

你的关注就是我为你服务的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值