十五、别名、列表及数组

1 别名

  • 定义

    对Linux命令进行重命名,或以简洁的名字表示命令及其冗长的选项和参数。

  • 语法

    alias alias-name='original-command'
    
    • alias是指定别名命令的关键字
    • alias-name是用户所指定的别名
    • original-command是所起别名所对应的命令及其参数,当存在空格时,需要用引号引起来
    • 等号两边不能有空格
    • 可写入.bash_profile文件,持久化
  • 删除别名

    unalias [-a][alias-name]
    
    • unalias -a 命令表示删除所有已设置的别名
    • unalias alias-name表示仅将别名alias-name删除
  • 说明

    • 在脚本中想使用别名,需要设置对于选项

      shopt -s expand_aliases
      # 设置此选项后,脚本才能使用别名功能
      
      • expand_aliases选项表示别名可以被扩展
    • alias命令不能在诸如if/then结构、循环和函数等混合型结构中使用

2 列表

  • 定义

    列表由一串命令用与运算(&&)和或运算(||)连接而成

  • 与列表(and list)

    • 定义

      用与运算连接的列表称为与列表(and list)

    • 语法

      命令1 && 命令2 && ... && 命令n
      
    • 说明

      与列表从左至右依次执行命令,直到某命令返回FALSE时,与列表执行终止

  • 或列表(or list)

    • 定义

      用或运算连接的列表称为或列表(or list)

    • 语法

      命令1 || 命令2 || ... || 命令n
      
    • 说明

      或列表从左至右依次执行命令,直到某命令返回TRUE时,或列表执行终止

  • 说明

    • 在使用与或列表嵌套时需要利用圆括号区分逻辑运算的优先级

3 数组

  • 定义

    数组(array)是一个由若干同类型变量组成的集合,引用这些变量时可用同一个名字

  • 语法

    #普通赋值
    array[0]='hello world'
    
    # 用圆括号将一组值赋给array
    array=(hello1 hello2 hello3 hello4) #值之间用空格相分隔
    
    # 在圆括号中从其他元素开始给数组赋值
    array=(hello1 [3]=hello1 hello3 [7]=hello4)
    
    # 数组取值
    ${array[x]}  # 引用array数组标号为x的值
    
  • 说明

    • 数组均由连续的存储单元组成,最低地址对应于数组的第一个元素,最高地址对应于最后一个元素

    • bash shell只支持一维数组,数组从0开始标号,最大支持599147937791

    • 允许数组空缺元素,可以不连续地给数组赋值,即array[0]、array[1]、array[4]、array[7]...

    • 圆括号结构对数组赋值可以指定所赋元素的标号,并以此标号为起点,继续下面的赋值

    • bash Shell默认将变量看做是只有一个元素的数组,而且@和*符号都可用来表示数组的元素

      #array[@]和array[*]都表示array数组的所有元素。@和*符号最常见的应用是打印数组的所有元素
      ${array[@]}
      ${array[*]}
      
    • for循环和@只打印出被赋值的元素,不打印未赋值的元素,这就使得利用for循环和@符号遍历数组元素时很方便,不必考虑数组的哪些元素已赋值、哪些元素未赋值。

    • 当用引号将\({city[@]}引起时,"\){city[@]}"与"\({city[\*]}"存在细微的差别,"\){city[@]}"将数组的所有元素分行打印,而"${city[*]}"只能将数组的所有元素打印在一行内,中间以IFS分隔

  • 数组地特殊用法

    • 数组字符串操作地特殊之处在于所有的操作都是针对所有的数组元素逐个进行的

      ${array[*]:0:2} # 抽取从第0个元素开始的2个元素
      ${array[*]#M*a} # 删除从M到a的最短子串
      ${array[*]##M*a}# 删除从M到a的最长子串
      ${array[*]/M*a/Hello} # 替换第一次与M*a相匹配的子串
      ${array[*]//M*a/hello} # 替换所有与M*a相匹配的子串
      
    • 数组也可以存放read命令所读入的用户输入参数,而且内建命令unset可以用于清空数组元素或整个数组

      # 定义数组
      declare -a array
      
      # 读取数据
      read -a array
      
      # 逐行打印
      for i in ${array[*]}
      do
      	echo "$i"
      done
      
      # 清空某个元素
      unset array[1]
      
      # 清空所有元素
      unset array
      
    • 数组连接

      array1=(hello1 hello2 hello3 hello4)
      
      array2=(world1 world2)
      
      # 声明数组
      declare -a array3
      
      #圆括号形式数组连接
      array3=(${array1[@]} ${array2[@]})
      
      # 统计数组的数量
      ${#array3[@]}  #一种用法
      
      #赋值形式数组连接
      
      # 在实现堆栈时,shift能将脚本参数左移,实现堆栈元素数量的减少
      # unset能将出栈的元素清除
      

4 linux中的特殊命令

  • shift命令

    shift命令主要用于向脚本传递参数时的每一位参数偏移,其中,每次将参数位置向左偏移一位

posted @ 2021-03-21 17:16  Norni  阅读(71)  评论(0编辑  收藏  举报