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)
上一篇 2016-08-24 10:12
下一篇 2016-08-24 10:12

相关推荐

  • N25-Bazinga-第四周作业

    N25-Bazinga-第四周作业 1.复制/etc/ske1目录为/home/tuser1,要求/home/tuser及其内部文件的属组和其他用户均没有任何访问权限。 [root@localhost ~]# cp -a /etc/skel/ /home/tuser1 [root@localhost&nbsp…

    Linux干货 2016-12-21
  • JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。     现实企业级Java开发中,有时候我们会碰到下面这些问题: Out…

    2017-08-17
  • Linux的主要发行版及区别

    Linux的主要发行版介绍 主流的发行版 Linux至上世纪90年代基于Unix而诞生,至今其发行版有几百种之多,但其主流的发行版有三个系列。 Debian系 Ubuntu属于Debinan系。 Redhat系CentOS属于Redhat系。Slackware系SUSE Linux即属于Slackware系。 主要区别 软件包管…

    Linux干货 2016-10-29
  • 文本处理工具sed、vim

    文本处理工具sed、vim 一、sed的使用 1、sed的概念 sed简单地说sed是一种行处理工具。 sed 是一种流性的行编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末…

    Linux干货 2016-08-11
  • CentOS 5,6 系统启动流程详解

        一、linux 组成介绍          1.linux 组成:              Lin…

    Linux干货 2016-09-11
  • HAProxy

    HAProxy简介 HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。HAProxy还可以将后端的服务器与网络隔离,起到保护后端服务器的作用。HAProxy的负载均衡能力虽不如LVS,但也是相当不错,而且由于其工作在7层,可以对http请求报…

    2017-05-17