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
下一篇 2016-08-24

相关推荐

  • 有证说话硬–实现CA和证书申请

    centos下利用openssl来实现证书的颁发 直接进入正题,细节坑就不说了,自己解决起来更有挑战性不是 步骤流程: 我是拿的7.3版本做CA主机,6.8版本做客户端 1.创建CA 2.生成私钥 3.生成自签名证书 4.到客服端 5.生成私钥 6.生成证书申请文件 7.将请求发送给-CA主机 8.CA主机-验证签署 9.拷回给客户端使用 用法:openss…

    2017-04-11
  • class9 bash编程基础(一)

    一、编程基础 程序:指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令; 编程语言: 低级:汇编 高级: 编译:高级语言–> 编译器–> 目标代码   &n…

    Linux干货 2016-08-15
  • 回溯法 -数据结构与算法

    1.回溯法算法思想: 定义:         回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 1、回溯法适用:有许多问题,当需要找出它的解集(…

    Linux干货 2015-04-07
  • N22-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/tuser1    (复制/etc/skel为/home/tuser1) [root@localho…

    Linux干货 2016-09-05
  • lamp部署及编译安装

    lamp 资源类型: 静态资源:原始形式与响应给客户端的结果一致; 动态资源:原始形式通常为程序文件(为某种编程语言开发),需要运行后将生成的结果展示给客户端;如果请求的资源不存在那么结果就会重定向至指定的文件中 客户端技术:javascript 服务端技术:php, jsp, … CGI:Common Gateway Interfa…

    Linux干货 2016-10-19
  • vim文本编辑器之快捷键满天飞

    vim文本编辑器不同于nano的是其功能非常强大,强大的功能还支持各种快捷键,让我们编辑文本的时候更方便更快捷。 本文将会按照下图所展示的功能来对命令一一讲解,           打开文件:       &n…

    Linux干货 2016-08-11