Linux之Shell(一)

Linux之Shell

  • Shell概述
    • Linux提供的Shell解析器
    • bash和sh的关系
    • Centos默认的解析器是bash
  • Shell脚本入门
    • 脚本格式
    • 第一个脚本
    • 脚本常用的执行方式
  • 变量
    • 系统预定义变量
    • 自定义变量
    • 特殊变量
      • $n
      • $#
      • \$*、\$@
      • $?
  • 运算符
  • 条件判断
  • 流程控制(▲)
    • if判断
    • case语句
    • for循环
    • while循环
  • read读取控制台输入

Shell概述

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

Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强

在这里插入图片描述

Linux提供的Shell解析器

[guozihan@hadoop100 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

bash和sh的关系

-rwxr-xr-x. 1 root root 964536 11月 25 2021 bash
lrwxrwxrwx. 1 root root 10 8月 25 20:20 bashbug -> bashbug-64
-rwxr-xr-x. 1 root root 6964 11月 25 2021 bashbug-64
lrwxrwxrwx. 1 root root 4 8月 25 20:20 sh -> bash

Centos默认的解析器是bash

[guozihan@hadoop100 bin]$ echo $SHELL
/bin/bash

Shell脚本入门

脚本格式

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

第一个脚本

需求:创建一个 Shell 脚本,输出 helloworld

  • 实例实操

    首先我们先创建文件夹program,然后在文件夹里创建sh文件,vim编辑

    [guozihan@hadoop100 桌面]$ mkdir program

    [guozihan@hadoop100 桌面]$ cd program/

    [guozihan@hadoop100 program]$ touch helloword.sh

    [guozihan@hadoop100 program]$ vim helloword.sh

    #!/bin/bash
    echo "helloworld"
    

脚本常用的执行方式

  • 采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限

    sh+脚本的相对路径

    [guozihan@hadoop100 program]$ sh ./helloworld.sh
    helloworld

    sh+脚本的绝对路径

    [guozihan@hadoop100 program]$ sh /home/guozihan/桌面/program/helloworld.sh
    helloworld

    bash+脚本的相对路径

    [guozihan@hadoop100 program]$ bash ./helloworld.sh
    helloworld

    bash+脚本的相对路径

    [guozihan@hadoop100 program]$ bash /home/guozihan/桌面/program/helloworld.sh
    helloworld

  • 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x

    ①首先要赋予 helloworld.sh 脚本的+x 权限

    [guozihan@hadoop100 program]$ chmod +x helloworld.sh

    ②执行脚本

    [guozihan@hadoop100 program]$ ./helloworld.sh
    helloworld

    [guozihan@hadoop100 program]$ /home/guozihan/桌面/program/helloworld.sh
    helloworld

注意:第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行 权限。第二种执行方法,本质是脚本需要自己

执行,所以需要执行权限。

  • 在脚本的路径前加上“.”或者 source

    ①现有文件test.sh,内容如下

    #!/bin/bash

    A=5

    echo $A

    ②分别使用 sh,bash,./ 和 . 的方式来执行,结果如下

    [guozihan@hadoop100 program]$ bash test.sh
    5

    [guozihan@hadoop100 program]$ sh test.sh
    5

    [guozihan@hadoop100 program]$ chmod +x test.sh

    [guozihan@hadoop100 program]$ ./test.sh
    5

    [guozihan@hadoop100 program]$ . test.sh
    5

原因:

前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中

第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前 shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需要 source 一下的原因。

开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的当前变量,父 shell 是不可见

变量

系统预定义变量

  • 常用系统变量

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

  • 案例实操

    查看系统变量的值

    [guozihan@hadoop100 ~]$ echo $HOME
    /home/guozihan

    显示当前 Shell 中所有变量:set

    [guozihan@hadoop100 ~]$ set

自定义变量

  • 基本语法

    (1)定义变量:变量名=变量值,注意,=号前后不能有空格

    (2)撤销变量:unset 变量名

    (3)声明静态变量:readonly 变量,注意:不能 unset

  • 变量定义规则

    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

    (2)等号两侧不能有空格

    (3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算

    (4)变量的值如果有空格,需要使用双引号或单引号括起来

  • 案例实操

    定义变量 A

    [guozihan@hadoop100 ~]$ A=5

    [guozihan@hadoop100 ~]$ echo $A
    5

    给变量 A 重新赋值

    [guozihan@hadoop100 ~]$ A=8

    [guozihan@hadoop100 ~]$ echo $A
    8

    撤销变量 A

    [guozihan@hadoop100 ~]$ unset A

    [guozihan@hadoop100 ~]$ echo $A

    声明静态的变量 B=2,不能 unset

    [guozihan@hadoop100 ~]$ readonly B=2

    [guozihan@hadoop100 ~]$ echo $B
    2

    [guozihan@hadoop100 ~]$ B=9
    -bash: B: 只读变量

    在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算

    [guozihan@hadoop100 ~]$ C=1+2

    [guozihan@hadoop100 ~]$ echo $C
    1+2

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

    [guozihan@hadoop100 ~]$ D=I love sunchen
    bash: love: 未找到命令…

    [guozihan@hadoop100 ~]$ D=“I love sunchen”

    [guozihan@hadoop100 ~]$ echo $D
    I love sunchen

    可把变量提升为全局环境变量,可供其他 Shell 程序使用

    export 变量

    在 helloworld.sh 文件中增加 echo $B

    #!/bin/bash echo "helloworld" 
    echo $B
    

    [guozihan@hadoop100 program]$ ./helloworld.sh
    helloworld

    [guozihan@hadoop100 program]$ export B

    [guozihan@hadoop100 program]$ ./helloworld.sh
    helloworld
    2

特殊变量

$n

  • 基本语法

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

  • 案例实操

    [guozihan@hadoop100 program]$ touch parameter.sh

    [guozihan@hadoop100 program]$ vim parameter.sh

    #!/bin/bash
    echo '=$n='
    echo $0
    echo $1
    echo $
    

    [guozihan@hadoop100 program]$ chmod 777 parameter.sh

    [guozihan@hadoop100 program]$ ./parameter.sh cls xz
    =$n=
    ./parameter.sh
    cls
    xz

$#

  • 基本语法

    $# 功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性

  • 实例实操

    [guozihan@hadoop100 program]$ vim parameter.sh

    #!/bin/bash
    echo '==========$n=========='
    echo $0
    echo $1
    echo $2
    echo '==========$#=========='
    echo $
    

    [guozihan@hadoop100 program]$ chmod 777 parameter.sh

    [guozihan@hadoop100 program]$ ./parameter.sh cls xz
    =$n=
    ./parameter.sh
    cls
    xz
    =$n=
    2

$*、$@

  • 基本语法

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

    $@ 功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

  • 案例实操

    [guozihan@hadoop100 program]$ vim parameter.sh

    #!/bin/bash
    echo '==========$n=========='
    echo $0
    echo $1
    echo $2
    echo '==========$#=========='
    echo $#
    echo '==========$*=========='
    echo $*
    echo '==========$@=========='
    echo $@
    

    [guozihan@hadoop100 program]$ ./parameter.sh a b c d e f g
    =$n=
    ./parameter.sh
    a
    b
    =$n=
    7
    =$n=
    a b c d e f g
    =$n=
    a b c d e f g

$?

  • 基本语法

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

  • 案例实操

    判断 helloworld.sh 脚本是否正确执行

    [guozihan@hadoop100 program]$ ./helloworld.sh
    helloworld

    [guozihan@hadoop100 program]$ echo $?
    0

运算符

  • 基本语法

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

  • 案例实操

    计算(2+3)* 4 的值

    [guozihan@hadoop100 program]$ S=$[(2+3)*4]

    [guozihan@hadoop100 program]$ echo $S
    20

条件判断

  • 基本语法

    (1)test condition

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

    注意:条件非空即为 true,[ guozihan ]返回 true,[ ] 返回 false

  • 常用判断条件

    • 两个整数之间比较

      -eq 等于(equal)

      -ne 不等于(not equal)

      -lt 小于(less than)

      -le 小于等于(less equal)

      -gt 大于(greater than)

      -ge 大于等于(greater equal)

      注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

    • 按照文件权限进行判断

      -r 有读的权限(read)

      -w 有写的权限(write)

      -x 有执行的权限(execute)

    • 按照文件类型进行判断

      -e 文件存在(existence)

      -f 文件存在并且是一个常规的文件(file)

      -d 文件存在并且是一个目录(directory)

  • 案例实操

    23 是否大于等于 22

    [guozihan@hadoop100 program]$ [ 23 -ge 22 ]

    [guozihan@hadoop100 program]$ echo $?
    0

    helloworld.sh 是否具有写权限

    [guozihan@hadoop100 program]$ [ -w helloworld.sh ]

    [guozihan@hadoop100 program]$ echo $?

    0

    /home/atguigu/cls.txt 目录中的文件是否存在

    [guozihan@hadoop100 program]$ [ -e /home/guozihan/cls.txt ]

    [guozihan@hadoop100 program]$ echo $?
    1

    多条件判断&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一 条命令执行失败后,才执行下一条命令

    [guozihan@hadoop100 program]$ [ guozihan ] && echo OK || echo notOK
    OK

    [guozihan@hadoop100 program]$ [ ] && echo OK || echo notOK
    notOK

流程控制(▲)

if判断

  • 基本语法

    • 单分支

      if [ 条件判断式 ];then程序
      fi
      

      或者

      if [ 条件判断式 ]
      then
      程序
      fi
      
    • 多分支

      if [ 条件判断式 ]
      then程序
      elif [ 条件判断式 ]
      then程序
      else程序
      fi
      

    注意事项:

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

    ②if 后要有空格

  • 案例实操

    输入一个数字,如果是 1,则输出 banzhang zhen shuai,如果是 2,则输出 cls zhen mei, 如果是其它,什么也不输出。

    [guozihan@hadoop100 program]$ touch if.sh
    [guozihan@hadoop100 program]$ vim if.sh
    
    #!/bin/bash
    if [ $1 -eq 1 ]
    then
    echo "banzhang zhen shuai"
    elif [ $1 -eq 2 ]
    then
    echo "cls zhen mei"
    fi
    
    [guozihan@hadoop100 program]$ chmod 777 if.sh
    [guozihan@hadoop100 program]$ ./if.sh 1
    banzhang zhen shuai
    [guozihan@hadoop100 program]$ ./if.sh 2
    cls zhen mei
    

case语句

  • 基本语法

    case $变量名 in

    “值 1”)

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

    ;;

    “值 2”)

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

    ;;

    ​ …省略其他分支…

    *)

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

    ;;

    esac

    注意事项:

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

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

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

  • 案例实操

    输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其它,输出 renyao。

    [guozihan@hadoop100 program]$ touch case.sh
    [guozihan@hadoop100 program]$ vim case.sh
    
    #!/bin/bash
    case $1 in
    "1")
    echo "banzhang"
    ;;
    "2")
    echo "cls"
    ;;
    *)
    echo "renyao"
    ;;
    esac
    
    [guozihan@hadoop100 program]$ chmod 777 case.sh 
    [guozihan@hadoop100 program]$ ./case.sh 
    renyao
    [guozihan@hadoop100 program]$ ./case.sh 1
    banzhang

for循环

  • 基本语法1

    for (( 初始值;循环控制条件;变量变化 ))
    do程序
    done
    
  • 案例实操1

    从 1 加到 100

    [guozihan@hadoop100 program]$ touch for1.sh
    [guozihan@hadoop100 program]$ vim for1.sh 
    
    #!/bin/bash
    sum=0
    for((i=0;i<=100;i++))
    do
    sum=$[$sum+$i]
    done
    echo $sum
    
    [guozihan@hadoop100 program]$ chmod 777 for1.sh 
    [guozihan@hadoop100 program]$ ./for1.sh 
    5050
    
  • 基本语法2

    for 变量 in123do
    程序
    done
    
  • 案例实操2

    打印所有输入参数

    [guozihan@hadoop100 program]$ touch for2.sh
    [guozihan@hadoop100 program]$ vim for2.sh 
    
    #!/bin/bash
    #打印数字
    for i in cls mly wls
    do
    echo "ban zhang love $i"
    done
    
    [guozihan@hadoop100 program]$ chmod 777 for2.sh 
    [guozihan@hadoop100 program]$ ./for2.sh 
    ban zhang love cls
    ban zhang love mly
    ban zhang love wls
    
  • $*和$@的区别

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

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

while循环

  • 基本语法

    while [ 条件判断式 ]
    do
    程序
    done
    
  • 案例实操

    从 1 加到 100

    [guozihan@hadoop100 program]$ touch while.sh
    [guozihan@hadoop100 program]$ vim while.sh 
    
    #!/bin/bash
    sum=0
    i=1
    while [ $i -le 100 ]
    do
    sum=$[$sum+$i]
    i=$[$i+1]
    done
    echo $sum
    
    [guozihan@hadoop100 program]$ chmod 777 while.sh 
    [guozihan@hadoop100 program]$ ./while.sh 
    5050
    

read读取控制台输入

  • 基本语法

    read (选项) (参数)

    ①选项:

    -p:指定读取值时的提示符;

    -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待

    ②参数

    变量:指定读取值的变量名

  • 案例实操

    提示 7 秒内,读取控制台输入的名称

    [guozihan@hadoop100 program]$ touch read.sh
    [guozihan@hadoop100 program]$ vim read.sh 
    
    #!/bin/bash
    read -t 7 -p "Enter your name in 7 seconds :" NN
    echo $NN
    
    [guozihan@hadoop100 program]$ chmod 777 read.sh 
    [guozihan@hadoop100 program]$ ./read.sh 
    Enter your name in 7 senconds:guozihan
    guozihan
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发容器11

一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List&#xff0c;在读多写少的场合性能非常好&#xff0c;远远好于 Vector. ConcurrentLinkedQueue: 高效的并…

设计模式入门笔记

1 设计模式简介 在IT这个行业&#xff0c;技术日新月异&#xff0c;可能你今年刚弄懂一个编程框架&#xff0c;明年它就不流行了。 然而即使在易变的IT世界也有很多几乎不变的知识&#xff0c;他们晦涩而重要&#xff0c;默默的将程序员划分为卓越与平庸两类。比如说&#xff…

unity 之参数类型之引用类型

文章目录 引用类型引用类型与值类型的差异 引用类型 在Unity中&#xff0c;引用类型是指那些在内存中存储对象引用的数据类型。以下是在Unity中常见的引用类型的介绍&#xff1a; 节点&#xff08;GameObject&#xff09;&#xff1a; 在Unity中&#xff0c;游戏对象&#xff…

无重叠区间【贪心算法】

无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {//先排序&#xff0c;按照左边界升序,注…

【爬虫】实验项目一:文本反爬网站的分析和爬取

目录 一、实验目的 二、实验预习提示 ​编辑 三、实验内容 四、实验要求 五、实验过程 1. 基本要求&#xff1a; 2. 改进要求A 3. 改进要求B: 六、资料 1.实验框架代码&#xff1a; 2.OpenSSL&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light…

Node与Express后端架构:高性能的Web应用服务

在现代Web应用开发中&#xff0c;后端架构的性能和可扩展性至关重要。Node.js作为一个基于事件驱动、非阻塞I/O的平台&#xff0c;以及Express作为一个流行的Node.js框架&#xff0c;共同构建了高性能的Web应用服务。 在本文中&#xff0c;我们将深入探讨Node与Express后端架构…

污水厂数字孪生 | 3D可视化管理系统助力污水企业数字化管理

随着城市化进程的不断加快&#xff0c;污水处理成为了城市环境保护的重要组成部分。传统的污水处理方式往往存在诸多问题&#xff0c;如信息不对称、安全隐患等。为了解决这些问题&#xff0c;污水处理3D可视化管控平台应运而生&#xff0c;它通过结合数字孪生技术和远程指导技…

【行为树】py_trees 学习笔记

学习资料 《Introduction to behavior trees》 1. 概念说明 1.1 Action&#xff1a;pt.behaviour.Behaviour 在一个行为树中&#xff0c;Action 是一个叶节点&#xff08;Leaf Node&#xff09;&#xff0c;它实际执行某种行为或任务&#xff0c;并返回成功、失败或运行中的…

Unity关键概念

Unity是一款跨平台的游戏引擎和开发工具&#xff0c;用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境&#xff0c;使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念&#xff1a; 游戏对象&#xff08;Game Obj…

SpringBoot整合Freemaker结合Vue实现页面填写一键自动生成Redis的配置文件

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

管理类联考——逻辑——形式逻辑——汇总篇——知识点突破——假言——各种假言

角度 多重假言 &#xff08;1&#xff09;如果A&#xff0c;那么B&#xff0c;除非C。 符号化为&#xff1a;┐C→ (A→B)。 等价于&#xff1a;┐C→ (┐A∨B)。 等价于&#xff1a;C∨(┐A∨B)。 等价于&#xff1a;C∨┐A∨B。 等价于&#xff1a;┐(C∨┐A&#xff09;→…

035 - datetime和timedstamp

该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以格式显示 值 。支持的范围是 到。 YYYY-MM-DD hh:mm:ss1000-01-01 00:00:009999-12-31 23:59:59 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 UTCTIMESTAMP的范围是UTC。 1970-01-01 00:00:01203…

素数之谜揭秘:一文详解试除法判断素数

这是我非常喜欢的一道编程题目。不要小看这道题&#xff0c;它看似简单&#xff0c;实则奥妙无穷。由于这是C语言的入门篇&#xff0c;只介绍最简单&#xff0c;也最容易想到的方法&#xff1a;试除法。但哪怕是试除法&#xff0c;也有不少变化。 要想了解试除法&#xff0c;首…

软件测试人需要掌握的测试知识架构体系(上)

软件计划与可行性研究&#xff08;问题定义、可行性研究&#xff09;&#xff1b;需求分析&#xff1b;软件设计&#xff08;概要设计、详细设计&#xff09;&#xff1b;编码&#xff1b;软件测试&#xff1b;运行与维护。 一、软件的生命周期(SDLC) 1、生存周期划分 各阶段…

软件测试/测试开发丨Selenium 高级定位 Xpath

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27036 一、xpath 基本概念 XPATH是一门在XML文档中查找信息的语言 XPATH使用路径表达式在XML文档中进行导航 XPATH的应用非常广泛&#xff0c;可以用于UI自…

RT-Thread 线程管理(一)

线程管理 在日常生活中&#xff0c;要完成一个大任务&#xff0c;一般会将它分解成多个简单、容易解决的小问题&#xff0c;小问题逐个被解决&#xff0c;大问题也就随之解决了。 在多线程操作系统中&#xff0c;也同样需要开发人员把一个复杂的应用分解成多个小的、可调度的…

Ubantu安装mongodb,开启远程访问和认证

最近因为项目原因需要在阿里云服务器上部署MongoDB&#xff0c;操作系统为Ubuntu&#xff0c;网上查阅了一些资料&#xff0c;特此记录一下步骤。 1.运行apt-get install mongodb命令安装MongoDB服务&#xff08;如果提示找不到该package&#xff0c;说明apt-get的资源库版本比…

android 实现本地一键打包,告别繁琐的studio操作

前言 在实际开发项目中&#xff0c;我们的工程目录往往是多个app在一个工程下的&#xff0c;每次打包都需要手动的用studio点击Build->Generate Signed Bundle or APK->APK 选择app&#xff0c;签名等&#xff0c;甚至有的app签名还不一样&#xff0c;还需要手动的来回切…

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…

设计模式(一)

1、适配器模式 &#xff08;1&#xff09;概述 适配器中有一个适配器包装类Adapter&#xff0c;其包装的对象为适配者Adaptee&#xff0c;适配器作用就是将客户端请求转化为调用适配者中的接口&#xff1b;当调用适配器中的方法时&#xff0c;适配器内部会调用适配者类的方法…