变量,数组,私有仓库的构建

1.理解函数调用,总结函数普通变量,环境变量和本地变量。

关于函数的理解,可以将其比作是模块化编程中的独立组件(或者说是模块)。函数能够自治地完成特定的任务或功能。为了构建一个实现多种功能的程序,开发者可以将不同的功能分别封装成独立的函数模块。这样,在主程序流程中,通过调用这些函数模块,可以实现多个功能的集成与协同工作。

  • 本地变量:作用在函数内部,函数结束后被自动销毁(使用local来设置本地变量)

  • 普通变量:只在当前shell进程中有效,函数外定义,可以在函数内部进行修改

  • 环境变量:当前shell和子shell有效(使用export或者declare定义环境变量)

eg:普通变量

在脚本内部

vim 2.sh

        name=lisi

        echo $name

        fun_var1()

        {

                echo $name

                name=zhangsan

                echo $name

        }

        echo $name

保存退出

在脚本外面执行echo $name

执行结果为

>>lisi

>>lisi

>>zhangsan

>>zhangsan

>>

在脚本内部,在函数外部定义了一个变量name,将其打印出来值为lisi,在函数内部打印变量name,执行结果为lisi,在函数内部将变量进行更改,改为zhangsan,将其再次打印出来结果为zhangsan,在函数外部打印更改后的变量结果为zhangsan。在脚本外部打印变量name,无法打印出变量name,因为name是一个普通变量,它只能够在当前进程中有作用。

eg:本地变量,使用local来进行声明

vim 3.sh

        fun_var()

        {

                local age=13

                echo $age

        }

        fun_var      #调用函数

        echo $age

保存退出

执行脚本

bash 3.sh

执行结果为

>> 13

>>

第一行是因为调用了函数,函数中有个本地变量,所以会执行出来为13

第二行为空白,是因为age是个本地变量,只在函数内部有用,在函数结束时会销毁,所以无法打印出变量age,故执行结果为空。

eg:环境变量,使用export进行定义

在脚本外,定义一个环境变量

export color=blue

echo $color

vim 4.sh

        echo $color

        color=red

        fun_var()

        {

                echo $color

                color=green

        }

        fun_var

        echo $color

保存退出

执行脚本

执行结果

>>blue

>>blue

>>green

在脚本外面再次改变变量的值

color=yellow

echo $color

执行结果为

>>yellow

这说明定义了环境变量,其可以在当前进程和子进程都发挥作用,都可以对变量进行修改。

2.总结普通数组和关联数组的用法。

普通数组

定义一个数组

color=(red yellow blue)

访问数组

echo ${color[0]}

>>red

echo ${color[1]}

>>yellow

echo ${color[2]}

>>blue

也可以使用for循环遍历所有的数组

 for array in "${color[@]}"; do

echo $array

done

关联数组

#声明关联数组,使用declare -A
declare -A age
# 初始化关联数组
age[man]="13"
age[woman]="14"
# 访问键为"man"的值
echo ${age[man]}  # 输出: 13

  • 普通数组更适合于需要按顺序存储和访问数据的场景,如处理列表、队列、栈等数据结构。
  • 关联数组更适合于需要根据键来快速查找和访问数据的场景,如存储配置信息、映射关系等键值对数据。

3.yum/dnf/apt总结程序包获取途径,以及rpm,yum,apt命令选项示例。

yum常用命令

yum repolist -v 列出仓库列表
yum install nginx   安装
yum remove nginx 卸载
yum clean all 清理缓存

apt常用命令

apt update 更新软件
apt -cache madison nginx 查看nginx的能安装的版本

4.简要总结yum/dnf工作原理。并尝试搭建私有yum仓库(base,epel)给另外一个虚拟机使用。

yum使用RPM包管理系统作为软件包的基础,并通过解决依赖关系自动安装和更新软件。当用户尝试安装一个软件包时,yum会检查该软件包的依赖关系,并自动从仓库中找到并安装所有必需的依赖包。

私有仓库的建立:

  • yum的配服务器的地址为:cd /etc/yum.repos.d,要创建以.repo后缀文件,yum仓库所指向的路径一定是repodata目录所在目录。ubuntu仓库路径在/etc/apt/sources.list。

在A机器中建立私有仓库,供给B机器使用。

在A机器中:

配置仓库

#搭建网站
yum -y install httpd
systemctl enable --now httpd  #开机自启动

#在浏览器输入服务器的地址即可

ls /var/www/html/下面创建一个文件,默认index.html

#测试网站是否可以搭建起来
vim /var/www/html/index.html
    

M49 web site

退出保存,刷新网站。

#模仿阿里云的镜像网站,创建BaseOS,extras,AppStream,epel四个仓库源
mkdir -p /var/www/html/rockylinux/8/{BaseOS,extras,AppStream}

#将光盘中已经有的BaseOS,AppStream仓库复制到网站中去
cp -r /misc/cd/Appstream/ /var/www/html/rockylinux/8/

#对于A机器中本身没有的extras和epel两个仓库需要从网络中进行配置,这里就是在网络中配置,在/etc/yum.repo.d/这个文件中进行配置,baseurl这里后面的网站就是找阿里云的,找到阿里云里面的镜像https://mirrors.aliyun.com/rockylinux/,然后找里面的自己想要的版本和仓库,找到repodata所在的网站即为baseurl的网站。需要将其先配置在A机器中,这样才可以供B机器使用。
vim extras.repo
    [extras]
    name=extras
    baseurl=https://mirrors.aliyun.com/rockylinux/8/extras/x86_64/os/?                                 spm=a2c6h.25603864.0.0.4f1f1758MpkMTF
    gpgcheck=0
:wq

#上一个步骤已经将A机器中没有的仓库配置在A中了,但是需要从网络中将其进行拉取到/var/www/html/rockylinux/8/这里面,执行下面命令
yum reposync --repoid=extras --download-metadata -p /var/www/html/rockylinux/8/

#要配置其他仓库也都是一样的,至此所有的仓库已经在A机器所在的网站中(eg:10.0.0.156/rockylinux)了。

在B机器中,直接配置仓库,其相关网址即为A机器的网址,假设A机器的网址时10.0.0.156

#像正常的配置仓库一样在/etc/yum.repo.d/中创建一个repo后缀的文件,从而在里面进行仓库的配置
vim test.repo
    [AppStream]
    name=AppStream
    baseurl=http://10.0.0.156/rockylinux/8/AppStream/
    gpgcheck=0
    #enable=0  禁用仓库
    
    [BaseOS]
    name=BaseOS
    baseurl=http://10.0.0.156/rockylinux/8/BaseOS/
    gpgcheck=0
    
    #gpgcheck=1,这里如果gpgcheck=1,那么gpgkey在下面的文件
    ls /etc/pki/rpm-gpg
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
    
    [extras]
    name=extras
    baseurl=http://10.0.0.156/rockylinux/8/extras/
    gpgcheck=0
    
    [epel]

     ……

这样B机器进行网络下载的时候使用的就是A机器的仓库。

你可能感兴趣的:(linux,运维,服务器)