05 bash脚本编程 变量 bash配置文件 if条件判断 for循环 case语句 while循环 until循环 函数 数组/字符串

  1. 脚本定义与分类
    在这里插入图片描述
    1.1在这里插入图片描述
    1.2
    在这里插入图片描述
    在这里插入图片描述
    1.3
    编程语言类型:
    强类型:变量需要申明是字符型还是数字型还是其他,例:字符串1跟数字型2相加会报错
    弱类型:可以不用申明是字符串或是数字型,例;字符串1跟数字型2相加可正常得3
    shell 属于弱类型并且不支持浮点数
    1.4

    编译器:所有的程序代码一起都变异成二进制
    C、C++、java
    解释器:解释之前先快速检查一遍语法,没有问题然后一条条命令开始解释
    shell、perl、python

  2. 变量:命名的内存空间
    在这里插入图片描述
    在这里插入图片描述
    2.1 类型
    环境变量(export VARNAME=VALUE、也可以先定义再导出):对当前shell以及子shell有效其他shell无效
    本地变量(set VARNAME=VALUE 也可直接赋值):只在当前shell中使用,子shell、其他shell都没效
    局部变量(local VARNAME=VALUE): 只在当前代码段有效
    位置变量
    特殊变量
    在这里插入图片描述
    $ 0 脚本本身
    shift [n] :配合位置变量,剔除n个参数
    在这里插入图片描述
    注意:函数可以修改全局变量,需要重新赋值local(局部变量)才能实现同名不同值。注:declare -i i=6 声明为整数类型的全局变量并赋值
    例:
    在这里插入图片描述
    在这里插入图片描述

2.2 注意:引用变量:${VARNAME} ,括号可以省略,但是后面有参数混淆时要加上
单引号不可以引用变量,双引号才可以
export、unset 都不需要加 $ 不然撤销的不是变量而是变量的值
在这里插入图片描述
2.3 本地变量:
在这里插入图片描述
2.4 环境变量:
在这里插入图片描述
在这里插入图片描述
2.5 只读变量:变量定义完后不允许再改动也不能被销毁只能等到shell进程终止
在这里插入图片描述
3. 变量 bash配置文件
在这里插入图片描述
3.1 登录方式分类
在这里插入图片描述
3.2 bash配置文件按功能分类分类
在这里插入图片描述
与 .bashrc 的区别在于,.bash_profile 一般只在用户登录时被读取一次,而 .bashrc 在每次启动新的 Bash shell 会话时都会被读取(包括从登录会话中启动新的子 shell )。
3.3
在这里插入图片描述
3.4 例:永久定义别名
vim ~/.bashrc 添加
在这里插入图片描述
修改配置文件不会立即生效需要重新读取或者重新登录
在这里插入图片描述

  1. 脚本运行
    #!/bin/bash :我们写完的脚本是系统不能识别的ASIIC码,必须注明要用的解释器路径来调用解释器执行

脚本在执行时需要他的路径,如果没有写路径默认去找$PATH,还要有执行权限
也可以前面直接加bash或其他解释器,因而脚本就作为解释器的参数可以不需要执行权限
但是 独立自动运行时还需要执行权限
在这里插入图片描述

条件判断

条件判断-a到-z的含义
1.
在这里插入图片描述
2. 条件测试的表达式
[ expression ] 等同与 test expression
[[ expression ]] 的功能更强大和通用。它同样用于条件判断,但在使用上有一些增强特性:(1) 支持字符串的模式匹配,使用=~操作符时支持 shell 的正则表达式,并且在匹配字符串或通配符时不需要引号。例如,[[hello==hell?]]的结果为真,表示变量hello是否以hell开头。
(2)&&、||、<和>等操作符能够正常存在于[[]]条件判断结构中。
示例:

   str="hello"
   if [[ "$str" == h* ]]; then  # 判断字符串是否相等
       echo "字符串相等"
   fi
   if [[ $num -gt 3 && $num -lt 10 ]]; then  # 进行数值比较和逻辑与操作
       echo "num 在 3 到 10 之间"
   fi
   

注意这里==与=~的区别:
==只能用于进行字符串的精确比较,也可以使用正则
=~ :用于所有正则表达式匹配包括数字。
示例:以下情况只能用=~

num="12345"
if [[ $num =~ ^[0-9]+$ ]]; then
    echo "字符串只包含数字"
else
    echo "字符串包含非数字字符"
fi

(()) 更侧重于整数运算和简单的逻辑判断,可以进行加、减、乘、除、取余等整数运算不需要使用 expr 命令,也支持逻辑与(&&)、逻辑或(||)等操作。在(())中,变量可以不使用$符号前缀。常用于算术运算比较等场景。例如:

   num=5
   ((num++))  # 将 num 的值增加 1
   ((result = num * 2))  # 进行乘法运算并将结果赋值给 result
   if ((num > 3))  # 判断 num 是否大于 3

在这里插入图片描述
3.1
在这里插入图片描述
在这里插入图片描述
3.2 字符串比较
在这里插入图片描述

在这里插入图片描述

  1. 1 逻辑与 &&
    逻辑或 ||
    逻辑否 !
    4.2
    在这里插入图片描述
    注意:
    在 Shell 中,-a(与)和 -o(或)用于在 test 命令([ ])中进行逻辑运算和条件判断,而 &&(与)和 ||(或)则在命令行中用于控制命令的执行逻辑、控制命令的顺序执行逻辑。
    4.3
    在这里插入图片描述
    例:
    在这里插入图片描述
    在这里插入图片描述
    注意|| 后面不能加多个&&,多个&&后面可以加||
    演示:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
bash -n +脚本 测试语法错误
bash -x +脚本 显示脚本执行的每一步
exit +n 直接退出脚本和设置状态码n
如果想要返回值就反撇号` 如果想要执行状态就不加
在这里插入图片描述

如果想要一个命令返回状态就不能赋予变量名
在这里插入图片描述
6.算数 运算

A=3
B=6
1、let命令
	let C=A+B (注意加号左右不能有空格)
2、expr命令
	C=`expr $A + $B`
3$(())结构
	C=$((A + B))

bc :是一个在 Unix 和 Linux 系统中用于进行任意精度的数学计算的命令行工具,可以交互使用,也可以命令行输出
-l选项:加载数学库,当使用 bc -l 后,您可以进行更复杂的数学运算和使用更多的数学函数
用法1:导入数据

[root@cj ~]# cat test.txt
   2 * 5
   10 / 2
[root@cj ~]# bc < test.txt
10
5
[root@cj ~]#

用法2:直接计算输出结果或者赋值

echo `bc <<< "2 + 3"`
result=$(bc <<< "2 + 3")

scale 用于设置小数的有效位数;注意scale 只对除法、取余、乘幂运算有效,对乘法运算无效
示例:

echo "scale=4;1.2323293128/1.1" | bc -l
1.1202

for 循环

在这里插入图片描述
1.1
变量只能是字符串不能进行运算所以要做声明
let
declare 声明
-i SUM=0 整数
-x 环境变量
1.2 赋值表达式:变量等于变量自身加|减|乘|除一个变量
在这里插入图片描述

在这里插入图片描述
2.如何生成列表

(1) {1..100}
(2) seq:三个数分别是 [起始数][步进长度]、结束数  要用反撇号

在这里插入图片描述
例子
在这里插入图片描述
向所有用户问好
在这里插入图片描述
如果是–add 添加十个不存在用户,如果是–del 删除十个已存在用户
在这里插入图片描述
如果位置变量给的是user1,user,user3 可以用sed替换空格
在这里插入图片描述
随机10个数取最大值最小值
在这里插入图片描述
3.for的另一种风格用法,近似于C语言
三个表达式分别表示:
expr1:指定初始条件、初始变量的值
expr2:判定什么时候退出循环
expr3:修正第一个变量的值

在这里插入图片描述
例:
在这里插入图片描述
在这里插入图片描述
例2:
在这里插入图片描述

在这里插入图片描述

case语句

  1. 结构
    在这里插入图片描述
    补充:
    在这里插入图片描述


在这里插入图片描述
例参数可以带多个选项可以给多次用法

接上图
在这里插入图片描述
例:
在这里插入图片描述
例:
在这里插入图片描述

在这里插入图片描述
例:
在这里插入图片描述
接上
在这里插入图片描述

while循环

1.适用于循环次数未知的场景,但必须有退出循环条件避免进入死循环
在这里插入图片描述
2.语法:CONDITION 进入下一次循环条件
在这里插入图片描述
例1:
100以内的和
在这里插入图片描述
例2
在这里插入图片描述
例3
在这里插入图片描述
例4
在这里插入图片描述
例4:
在这里插入图片描述
在这里插入图片描述
while特殊用法:
在这里插入图片描述

until循环

1.与while用法相反
在这里插入图片描述

在这里插入图片描述
发现hadoop登录就退出循环并echo
在这里插入图片描述
对以上进行优化
当引用一个状态返回值时可以直接当做进入循环的条件
在这里插入图片描述

在这里插入图片描述

函数

在这里插入图片描述
return: 显示状态返回值(如果需要函数的状态返回值,默认最后一个命令的状态通常不符合要求),函数任何时候遇到return都会终止此函数,不会执行后面函数,0为成功非 1-255为失败,然后执行函数之外往后的代码
例1:
在这里插入图片描述
调用函数自身命令 用fact,递归调用必须要有中指终止条件在这里插入图片描述
在这里插入图片描述

continue:作用:用于跳过当前循环中的本次迭代,直接开始下一次迭代。
用于跳出当前所在的循环结构(如 for、while、until 循环),直接进入下一轮循环

在这里插入图片描述
例:
在这里插入图片描述
break:用于跳出当前所在的循环结构(如 for、while、until 循环),并只执行后面的操作
在这里插入图片描述
优化以上脚本
在这里插入图片描述

在这里插入图片描述

数组/字符串

在这里插入图片描述

	echo ${ARRAY_NAME[*]}:输出数组所有元素
	echo ${!ARRAY_NAME[*]}:输出数组所有索引
	

例1.
在这里插入图片描述
例2
在这里插入图片描述
2.
在这里插入图片描述
数组切片示例

list=(AA BB CC DD EE)
echo ${list[@]:1:2}

表示从第二个元素开始输出两个元素也就是BB CC

3.字符串切片
(1)使用子串扩展 ${string:start:length}

string="Hello World"
sub_string=${string:6:5}  # 从第 7 个字符开始,截取 5 个字符,结果为 "World"

(2)使用 cut 命令

string="Hello World"
echo "$string" | cut -c7-11  # 从第 7 个字符开始,截取到第 11 个字符,结果为 "World"

(3)使用 awk 命令

string="Hello World"
echo "$string" | awk '{print substr($0, 7, 5)}'  

结果为 “World”,表示从输入的每一行(这里就是 $string )的第 7 个字符开始,截取长度为 5 的子串,并将其打印出来。$0表示当前前处理的完整行的内容

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值