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

相关推荐

  • 重返课堂

    1.学习目的: i. IT业发展日新月异,当前所掌握的知识已无法满足工作需要。 ii. IT行业更新飞快,这就要求从业人员不断的去学习,不断的完善自己,才不至于被淘汰。 iii. 在这个大数据、云计算为王的时代,掌握Linux是入行“敲门砖”。 iv. 年龄已大,把握住人生不多的专门学习的机会,再博一次。 2.浅识Linux i. linux为何? Linu…

    2018-03-26
  • N26-第二周作业-邢岩(1)

     马哥门徒-N26-邢岩   度过了一个愉快的春节,又到了上班的时候了!我的Linux基础学习也进行到了疯狂记命令的阶段,痛并快乐着!那就让我来说一下Linux上的文件管理类命令都有哪些吧。   Linux的文件相关命令还是蛮多的,我不妨简单的总结一下,归结为6类常用的命令: 1、目录切换类命令   pwd命令:显示工…

    Linux干货 2017-02-10
  • Vim编辑器使用详解

    Vim编辑器使用详解 vim介绍 为什么要学习vim vim三种模式 vim工作模式(图解) vim如何打开文件 vim关闭文件 命令模式光标跳转 字符间跳转: 单词间跳转: 行首行尾跳转: 行间移动: VIM的命令模式下的命令: 字符编辑: 替换命令(r, replace) 删除命令: 复制命令 粘贴命令(p, paste): : 其他相关的编辑操作: 翻…

    Linux干货 2016-09-06
  • 链接分析算法之:主题敏感PageRank

      前面的讨论提到。PageRank忽略了主题相关性,导致结果的相关性和主题性降低,对于不同的用户,甚至有很大的差别。例如,当搜索“苹果”时,一个数码爱好者可能是想要看 iphone 的信息,一个果农可能是想看苹果的价格走势和种植技巧,而一个小朋友可能在找苹果的简笔画。理想情况下,应该为每个用户维护一套专用向量,但面对海量用户这种方法显然不可行。所…

    Linux干货 2016-02-17
  • IO,用户与组管理,文件,目录权限管理

           文件统配匹配模式:元字符文件名通配符*匹配任意长度的任意字符[root@localhost ~]# ls /root/D*/root/Desktop  /root/Documents  /root/Downloads ?匹配单个任意字符[root@localhost ~]# …

    Linux干货 2016-08-05
  • 20160804课堂作业

    grep正则表达式课堂作业 1、用正则表达式表示IP地址 #grep -E "(\<[1-9]|[1-9][[:digit:]]|1[[:digit:]][[:digit:]]|2[0-4][[:digit:]]|25[0-5]\>)\.(\<[[:digit:]]|[1-9][[:digit:]]|1[[:digit:]] [[…

    Linux干货 2016-08-05