Bashe Shell之数组及bash配置文件解析

数组

  数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素,相当于多个变量的集合

 

§数组名和索引

索引:编号从0开始,属于数值索引

  注意:所以可支持使用自定义的格式,而不仅是数值格式,即关联索引,bash4.0版本之后开始支持,bash的数组支持稀疏格式(索引不连续)

 

§声明数组

    declare –a arryname

    declare –A arryname 关联数组

 

初始化或赋值:各元素之间使用空白字符隔开,不加下标默认为第一个

第一种方式

    arryname=(‘a’  ‘b’  ‘c’)

    arryname=( [0]=’a’ [1]=’b’ [2]=’c’)

第二种方式

    arryname[1]=”one”

第三种方式:交互式

    read  -a  arryname

    a  b  c

 

§ 引用数组

    echo ${arryname[0]}

 

§获取元素的长度

    echo  ${#arryname[@]}

    echo  ${#arryname[*]}

    当我们想去某个字符的长度,挠破脑袋想找个工具来计算出字符串的长度时,bash shell提供了计算出字符的长度,这时候bash shell的功能就展露无遗了

    1.jpg

    bash的伪随机生成器

    $RANDOM

 取特定位数的

   $[$RANDOM%11]:取10以内的随机数

 

§数组数据处理

  引用数组中的元素:

  所有元素:echo ${arryname[@] , echo ${arryname[*]}

  数组切片:${arryname[@]:offset:number}

     offset:要跳过的元素个数

     number:要去除的元素个数

     echo ${arryname[@]:2:3} 跳过两个字符,取三个字符

     2.jpg

 向数组中追加元素

    arryname[${#arryname[@]}]

 

  删除数组中的某元素:导致稀疏格式

    unset arryname[索引编号]

     3.jpg

 关联数组:

    dexclare –A arryname3

    arryname=([a]=1  [b]=2  [c]=3 … ),这里的索引编号可以自定义

  注意:在赋值之前,必须要声明数组为关联数组

    4.jpg

 

 

 

§字符串处理

    bash的字符串处理工具

 字符串切片

    echo ${#arryname}:返回字符串变量的arryname的长度

    echo ${arryname:offset}:返回字符串变量arryname从第offset个字符后(不包括offset的取值在0${#arryname}-1之间

    echo ${arryname:offset:number}:返回字符串变量arryname中从offset个字符后(不包括)的字符开始,长度为number的字符

    echo ${arryname:  -number}:去字符串最右侧的几个字符

 注意:冒号后必须有一个空白字符

     5.jpg

 基于模式取子串

    echo ${arryname#*keyword}:其中keywod可以是指定的任意字符

功能:自左而右,查找arryname变量所存储的字符串中,第一次出现keyword,删除字符串开头至第一次出现keyword字符之间的所有字符

     echo ${arryname##*keyword}

功能:自左而右,查找arryname变量所存储的字符串中,删除字符串开头至最后一次出现keyword字符之间的所有字符

    echo ${arryname%keyword*}:其中keyword可以使指定的任意字符

功能:自由而左,查找arryname变量所存储的字符串中,第一次出现keyword,删除字符串最后一个字符至第一次出现keyword字符之间的所有字符

     echo ${arryname%%keyword*}

功能:自由而左,查找arryname变量所存储的字符串中,删除字符串最后一个字符至最后一次出现keyword字符之间的所有字符

    6.jpg 

    在工作中,有时可能会遇到去一个url的协议以及端口这时候取字符串这个功能就非常好使了

    url=http://www.magedu.com:80
    ${url##*:}80
    ${url%%:*}http

 

 查找替换

    echo ${arryname/pattern/abc:查找arryname所表示的字符串中,第一次被pattern所匹配到的字符串,用abc来替换

    echo ${arryname//pattern/abc} :查找arryname所表示的字符串中,所有被pattern所匹配到的字符串,用abc来替换

    echo ${arryname/#pattern/abc}:查找arryname所表示的字符串中,行首被pattern所匹配到的字符串,用abc来替换

    echo ${arryname/%pattern/abc}:查找arryname所表示的字符串中,行尾被pattern所匹配到的字符串,用abc来替换

     7.jpg

 

 查找并删除

    echo ${arryname/pattern}:查找arryname所有字符串中,删除第一次被pattern所匹配到的字符串

    echo ${arryname//pattern}:查找arryname所有字符串中,删除所有被pattern所匹配到的字符串

    echo ${arryname/#pattern/abc}:查找arryname所表示的字符串中,删除行首被pattern所匹配到的字符串echo                       

    ${arryname/%pattern/abc}:查找arryname所表示的字符串中,删除行尾被pattern所匹配到的字符串

  8.jpg




 字符大小写转换

    echo ${arryname^^}:把arryname的所有小写字母转换成大写

    echo ${arryname,,}:把arryname的所有大写字母转换成小写

  9.jpg

 

 

 变量赋值

    echo ${arryname:-value}:如果arryname为空或者未设置,那么就返回value,否则,则返回arryname的值

    echo ${arryname:+value}:如果arryname非空,那么就返回value,否则返回空值

    echo ${arryname:=value}:如果arryname为空或者未设置,那么就返回value,并且将value赋值给arryname,否则返回arryname的值

    echo ${arryname:?error_messages}:如果arryname的值为空或未被设置,那么返回error_messages;否则,则返回arryname的值

  10.jpg

 

 为脚本程序使用配置文件,实现变量赋值

1.         定义在文本文件中,每行定义”name=value”

2.         在脚本中source次文件即可

 

   Shell变量一般是无类型的,但是Bash Shell提供了declaretypeset两个命令用于指定变量的类型,两个命令是完全等价的

declare [选项] 变量名

         -r 将变量设置为只读属性

         -I 将变量设置为整型

         -a 将变量设置为数组

         -A 将变量设置为关联数组

         -f 显示此脚本前定义过的所有函数名及内容

         -F 仅显示此脚本前定义过的所有函数名

         -x 将变量定义为环境变量

         -l 将变量值转为小写字母

         -u 将变量值转为大写字母

 

 间接变量引用

 如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就成为间接引用

    a=b

    b=123

    a的值b,而b又是变量名

    b的值为123,间接变量引用是指通过a获得变量值123的行为

    Bash Shell提供了两种格式实现间接变量引用

    eval c=\\$$a

    c=${!a}

    11.jpg

 

    Bash如何展开命令行

 把命令行分成单个命令词

 展开别名

 展开大括号中的声明

 展开波浪符声明(~

 命令替换$()和` `

 再次把命令行分成命令词

 展开文件通配符(*、?、[ab]

 准备I/O重定向(<>

 运行命令

 

 

 防止扩展

 反斜线(\)会使随后的字符按原意解释

 echo you cost :\$500

 加引号来防止扩展

 单引号’ ‘ 防止所有扩展

 双引号也防止所有扩展,但是一下几种情况除外

   $     变量扩展

   `          命令替换

   \          禁止单个字符扩展

   !          历史命令替换

 

    Bash的配置文件

 按生效范围划分

 全局配置

    /etc/profile

    /etc/profile.d/*.sh

    /etc/bashrc

 个人配置

    ~/.bash_profile

    ~/.bashrc

  按功能划分

    profile类:为交互式登录的shell提供配置

 全局:/etc/profile,/etc/profile.d/*.sh

 个人:~/.bash_profile

 功能

1.         用于定义环境变量

2.         运行命令或脚本

 

    bashrc类:为非交互式登录的shell提供配置

 全局:/etc/bashrc

 个人:~/.bashrc

 功能

 定义命令别名

 定义本地变量

 

 修改profilebashrc文件后需生效

 两种方法:

 重新启动shell进程

   “.” source  文件

 

   shell登录的两种方式

  交互式登录:

    (1)直接通过终端输入账号密码登录;

    (2)使用“su-UserName”切换的用户

 执行顺序:

    /etc/profile-à/etc/profile.d/*.shà~/.bash_profileà~/.bashrcà/etc/bashrc

 

 非交互式登录:

   (1)suUserName

   (2)图形界面下打开的终端

   (3)执行脚本

 执行顺序:

    ~/.bashrcà/etc/bashrcà/etc/profile.d/*.sh

 

    Bash退出任务

 保存在~/.bash_logout文件中

 在退出登录shell时运行

 用于创建自动备份和清除临时文件

 

 

 

1、生成10个随机数,采用冒泡算法进行升序或降序排序

  将给出的数,一次做大小比较,从小往大的顺序排列

 #!/bin/sh
 #sorting following array
 echo "please input a number list:"
 read -a arr
   for (( i=0 ; i<${#arr[@]} ; i++ ))
   do
    for (( j=${#arr[@]} – 1 ; j>i ; j– ))
    do
     #echo $j
      if  [[ ${arr[j]} -lt ${arr[j-1]} ]]
      then
       t=${arr[j]}
       arr[j]=${arr[j-1]}
       arr[j-1]=$t
      fi
   done
 done
 echo "after sorting:"
 echo ${arr[@]}
 12.jpg

 

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

(0)
fszxxxksfszxxxks
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • zabbix之报警功能的实现

    一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是那个红色的ID了。 h…

    2014-11-12
  • Linux系统的磁盘管理

    linux磁盘及文件系统管理 磁盘分区及文件系统管理 RAID设备 LVM: 磁盘的动态编辑管理 CPU, memory(RAM), I/O I/O设备: Disks, Ethercard (网卡) Disks: 实现持久存数数据 接口类型: IDE(ata): 并口  理论速度: 133MB/s SCSI: 并口 640MB/s SATA: 串口…

    Linux干货 2016-08-29
  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色显示 不在线的主机使用红色显示 #!/bin/bash for i in {1..254};do if /bin/ping -W 1 -c 1 172.16.250.${i} >> /dev/…

    Linux干货 2017-08-20
  • Linux的磁盘管理:

    Linux的磁盘管理: Linux的核心:一切介文件:     open,read,write,close 块设备:block,存取单位‘块’,磁盘 字符设备:char 存取单位‘字符’,键盘 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信: 设备号码:   &nbs…

    Linux干货 2016-07-22
  • vim的使用

    vim 编辑器  vim的模式:      编辑模式      输入模式      扩展编辑模式:在编辑模式中输入:  ====================================   编辑模式转换成输入模式 &nbs…

    Linux干货 2016-08-11
  • linux系统监控 sar命令详解

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告, 包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。 本文主要以CentOS 6.3 x64系统为例,介绍s…

    Linux干货 2015-06-17

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-26 10:09

    文章内容很完整,让我明白了数组的定义和调用,但在bash环境配置,只是进行了知识点的罗列,这是不合适的,希望自己能通过总结成自己的语言,清晰的表述出自己想要表达的意思。