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

相关推荐

  • linux文件管理命令与命令行展开

    linux文件管理命令与命令行展开

    2017-12-11
  • 磁盘管理

    linux的哲学思想:一切皆文件; 设备类型: 块(block):随机访问,交换数据单位是“块”; 字符(character):线性访问,数据交换单位是“字符”; 设备文件:FHS /dev     设备文件:关联至设备驱动程序;设备的访问入口;       &nbsp…

    Linux干货 2016-08-30
  • Linux终端类型介绍

    相关命令:tty 适合阅读人群:所有   终端机 终端(Computer terminal),是一台电子计算机或者计算机系统,用来让用户输入数据,及显示其计算结果的机器。又名终端机,它与一部独立的电脑不同,其实就是一种输入输出设备,一台电脑多人使用,每增加一个用户只须增加一台显示器和一套键盘鼠标就可以成为一个独立的终端,多用户可同时使用互相独立,跟…

    Linux干货 2016-10-14
  • 【yum安装程序】Centos7.4使用yum光盘安装httpd

    举例:Centos7.4使用yum光盘安装httpd

    Linux干货 2018-03-17
  • 修复引导启动

    修复MBR 备份MBR: dd if=/dev/sda of=/root/mbr.bak  bs=1  count=512  破坏 dd if=/dev/zero of=/dev/sda  bs=1 count=446 这里只要小于等于446即可。 借助安装光盘修复 装入光盘,在光盘引导界面选择 然后全部默认进入救援命令界面 切换根目录 使用grub-ins…

    2017-12-24
  • IP地址之IPv4

    一、概述   IP地址有IPv4和IPv6两个版本,目前我们通常所说的IP地址是指IPv4。   IP地址由32位的二进制数组合而成,为了方便人类记忆,将二进制转换成4个十进制的数值。   在这32位数据中分为网络号与主机号两个部分。 二、IP的分级   IP网段分为五个等级,其定义如下:   A类:规定前面…

    Linux干货 2016-02-14