SHELL编程之数组运用及YUM软件包管理

SHELL编程中,当要引用到多个值的时候,一个一个地进行变量赋值会让我们的脚本变得繁琐,不利于代码的优化,所以,就需要通过数组进行定义,优化代码,减少不必要的定义和命令操作。

SHELL中的数组:存储多个元素的连续内存空间

数组名:整个属组只有一个名字

数组索引: 编号从0开始

  数组名[索引]

  ${array_name[index]}

注:bash-4及之后的版本,支持自定义索引,而不仅仅是0,1,2,3.。。数字格式

  此类属组称之为”关联数组”

blob.png

声明数组:

  Declare -a 声明一个索引数组

        -A 声明一个关联数组

数组中元素赋值方式

  1.一次只赋值一个元素

    Array_name[index]=value

    直接引用数组名,显示第一个元素

  2. 一次赋值全部元素

    Array_name=(“val1” “val2” “val3” …)

  3.只赋值特定元素

    Array_name=([1]=”val1” [3]=”val2” …)

    稀疏格式的属组                 

blob.png

  4. read –a array

    引用数组中的元素:${array_name[index]}

    引用时,只给数组名,表示引用下标为0的元素

    ${array_name[*]/[@]}引用数组中的所有元素

数组长度(数组中元素个数)

     ${#array_name}

    ${#array_name[*]/[@]}

    $(#array_name)不加[]表示显示属组中第一个元素的长度

blob.png

Declare –A 声明关联数组

引用数组中所有元素

    ${array_name[*]/[@]}

数组元素切片:${array_name[@]:offset:number}

   Offset 要跳过的元素个数

   Number: 要取出的元素个数,省略number,表示取偏移量后面的所有元素

向非稀疏格式数组中追加元素

   Array_name[${#array_name[*]}]=

删除数组中某个元素

   Unset array_name[index]

关联数组

     Declare –A array_name

   Array_name=([index_name1]=”val1” [index_name2]=”val2” …)

    

Bash的内置字符串处理工具

   字符串切片:

   ${var:offset:number}

   取字符串子串

   ${var: -4} 有空格

   取字符串的最右侧的几个字符 冒号后面有一个空白字符

   基于模式取子串

   ${var#*word} word是指递归的分隔符,功能:自左而右,查找var变量所存储的字符串第一次出现word的分隔符,删除字符串开头至此分隔符之间的所有字符

   ${var##*word} word是指递归的分隔符,功能:自左而右,查找var变量所存储的字符串直到最后一次出现word的分隔符,删除字符串开头至此分隔符之间的所有字符

    mypath=”/etc/init.d/functions”

    echo ${mypath##*/}: functions

    echo ${mypath#*/}: etc/init.d/functions     

   ${var%word*} : word是指递归的分隔符,功能:自右而左,查找var变量所存储的字符串直到第一次出现word的分隔符,删除此分隔符至字符串尾部之间的所有字符

   ${var%%word*}: word是指递归的分隔符,功能:自右而左,查找var变量所存储的字符串直到最后一次出现word的分隔符,删除此分隔符至字符串尾部之间的所有字符

    mypath=”/etc/init.d/functions”

   ${mypath%/*}: /etc/init.d

     blob.png   

   

查找替换:

     ${var/pattern/substi}:查找var所表示的字符串,第一次被pattern所匹配的字符串替换为substi字符串             

    ${var//pattern/substi}:查找var所表示的字符串,所有被pattern所匹配字符串替换为substi字符串

    ${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,替换为substi字符串

    ${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,替换为substi字符串

    注意:pattern中使用glob风格的通配符

    blob.png

 

查找删除

     ${var/pattern}: 以pattern查找为模式,查找var字符串中第一次的匹配,并删除值

    ${var//pattern}:以pattern查找为模式,查找var字符串中所有的匹配,并删除值

    ${var/#pattern}:以pattern查找为模式,查找var字符串中行首第一次匹配,并删除值                

    ${var/%pattern}:以pattern查找为模式,查找var字符串中行尾第一次匹配,并删除值

 

大小写转换

     ${var^^} 把var中所有小写字符转换为大写

    ${var,,} 把var中所有大写转换为小写

         blob.png

变量赋值

     ${var:-value} 如果var变量为空,或未设置,那么返回为value, var不为空,则返回var

    ${var:=value} 如果var变量为空,或未设置,那么返回为value,并将value赋值给var变量, var不为空,则返回var

    ${var:+value} 如果var变量为不为空,那么返回为value

    ${var:?ERROR_INFO} 如果var为空,或未设置,那么返回ERROR_INFO为错误提示,否则返回var的值

     blob.png            

Declare 变量声明

    -i 声明为数值类型   declare -i a=awed 则a的值变为0

    -r 声明为只读变量   declare -r a=hello

    -a 声明为普通数组   declare -a a  a[0]=value  索引默认从0开始的数字

    -A 声明为关联数组   declare -A a  a[a]=value  索引可以自己指定

    -f 查看声明的函数及内容    declare –f

    -F 查看声明的函数名       declare -F

    -l 将声明的变量字符全转化为大写   declare –l a=XYZ  则a的值为xyz

    -u将生命的变量字符全转化为小写    declare –u a=xyz  则a的值为XYZ

    echo ${a^^} 将数组中的小写全转化为大写

    echo ${a,,} 将数组中的大写全转化为小写

blob.png

YUM软件包管理    

   YUM(Yellowdog Update Modifer),rpm的前端程序,用来解决程序的依赖性,可以在多个库之间定位软件包。

blob.png

   搜索:

    search string1 [string2]…

    以指定的关键字搜索程序包名及summary信息

   查看指定包所依赖的capability

    deplist package1 [package2]…

   查看yum事物历史

    history [info|list|package-list|package-info|summary|addon-info|undo|rollback|new|sync|stats] 

   软件包组管理

    groupinstall group1 [group2]…

    groupupdate group1 [group2]…

    grouplist [hidden] …

    groupremove group1 [group2]…

    groupinfo group1 [group2]… 

   YUM的命令行选项

    –nogpgcheck 禁止gpg检查

    -y 默认回答yes

    -q 静默模式

    –disablerepo=repoidglob 临时禁止此处指定的repo

    –enablerepo=repoidglob 临时启用此处指定的repo

    –noplugins 禁止所有插件

    

程序包编译

   程序包编译安装:

    Application-Version-release.src.rpm安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装

    源代码–>预处理–>编译–>汇编–>链接–>执行

   

   C代码编译安装三步骤

    1. ./configure 

      1)通过选项传递参数,指定启用特性,安装路径等,执行时会参考用户的指定以及makefile.in文件生成makefile

      2)检查依赖到的外部环境

    2. make 根据makefile文件构建应用程序

    3. make install 复制文件到相应路径

    注意:安装前查看install readme文件,获取相关信息

源码安装http服务

    1.先从ftp服务器上下载相应要安装的源码包

    blob.png

    2.解压缩源码包

    blob.png

    3.编译安装前先查看其install和readme文档,获取相关信息

    blob.png

    blob.png

    4. ./configure –help可以获取相关选项的参数

    blob.png

    5. ./configure编译 –prefix指定安装路径

    blob.png

    6 make

    blob.png

    7 make install

    blob.png

    8 编译安装完成后,可以查看相应安装的文件

    blob.png

    9 将编译的程序导入到环境变量中

    blob.png

    10 将程序使用的库文件导入到库中,ldconfig重新加载库缓存

    blob.png

    blob.png

    11 导入头文件

    blob.png

    12 导入帮助文件

    blob.png

    13 启动服务

    blob.png

    14 访问ip对应80端口 如links

    blob.png    

紧急模式恢复受损的kernel文件

    1.查看kernel版本信息

    blob.png

    2.rpm -e kernel –nodeps 进入救援模式

    blob.png

    blob.png

    3 查看分区挂在情况

    blob.png

    4 rpm -ivh /run/install/repo/Packages/kerner*.rpm –root=/mnt/sysimage

    blob.png

    

    5 重启

    blob.png

输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

    blob.png

    blob.png

原创文章,作者:Stupid_L,如若转载,请注明出处:http://www.178linux.com/39280

(0)
Stupid_LStupid_L
上一篇 2016-08-24 10:12
下一篇 2016-08-24 10:12

相关推荐

  • Http协议中的各种长度限制总结

    HTTP1.0的格式 request(HTTP请求消息)结构:一个请求行.部分消息头,以及实体内容,其中的一些消息内容都是可选择的.消息头和实体内容之间要用空行分开. GET /index.html HTTP/1.1 //请求头,下面都是消息头.Accept: */*Accept-Languang:en-usConnection:keep-aliveHost…

    Linux干货 2015-04-04
  • vim编辑器

                在Linux的学习中,无论是编写脚本还是修改文件内容,我们最经常用的就是vim编辑器.vim编辑器功能十分强大,如今不仅仅只应用在Linux中.今天就来介绍一下vim编辑器的功能 进入和退出vim     进入:   在终端输入vim 文件名 ,…

    Linux干货 2017-08-05
  • 根分区伸缩实验

    众所周知LVM是Linux环境下对 磁盘进行管理的一种机制。用户在安装Linux操作系统时,难以分配合适的硬盘空间,当一个分区存放不下某个文件时,这个文件因为文件系统的限制,也不能 跨越多个分区来存放。而遇到出现某个分区耗尽时,只有使用调整分区大小的工具。随着LVM功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方 便…

    Linux干货 2015-05-27
  • 马哥教育网络班21期第6周作业

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s/^[[:space:]]\+/#& 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; %s/^[[:space:]]\+/ …

    Linux干货 2016-12-05
  • Linux的启动流程

    Linux的启动流程大致上如下图. 现在详细说明一下每个步骤: 第一阶段 当系统启动时,系统首先会加载BIOS。BIOS的首先会检查各硬件设备,当检查完毕没有问题之后。BIOS会根据设定的BootSequence来寻找可以引导系统的设备。一般而言,Linux是通过磁盘上MBR来引导系统的。 第二阶段 MBR是Master Boot Record,是位于磁盘第…

    Linux干货 2016-02-28
  • http特性

    一、何为http 什么是http?http是Hyper Text Mark Language的缩写,超文本标记语言。Apache下的httpd是实现了这一功能的开源软件。 二、http特性 http特性1:持久连接及MPM参数设置 KeepAlive {On|Off} #是否启动持久连接 MaxKeepAliveRequests 100 …

    Linux干货 2015-10-15