Bash Shell编程----Shell中的数组与字符串

Shell中的数组

  • 数组的定义: 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。

    • 例,array=(java spring python shell linux sql "spring boot")

    • 若是元素内也有空格,则必须使用引号

  • 数组的赋值:

    • 直接赋值:array=(java spring python shell linux sql "spring boot")

    • 只给某个元素赋值:

      • array[1]=cvb;array[4]=bdc

      • array=([0]=java [2]=spring)

#!/bin/bash

#生成10个随机数赋给一个数组,并求出最大值

max=0

for i in {0..9};do

    array[$i]=$RANDOM        # $RANDOM可随机生成一个1到32767的数字

    echo ${array[$i]}

    [ ${array[$i]} -gt $max ] && max=${array[$i]}

done

echo "MAX:$max"
  • 读取数组:

    • 直接输出数组:echo $array,会直接输出数组的第一个元素,即java,这里与c很像

    • 根据下标输出:echo $array[2],下标从0开始。

    • 下标也是变量:echo ${array[$i]},即根据变量i输出数组的内容

  • 获得数组的长度:echo ${#array[*]}或echo ${#array[@]}

    • 同样的,获得数组内某个元素的长度:echo ${#array[$i]}

  • 输出数组的所有元素:echo ${array[*]},也可以使用@符号,它与获得数组长度就是差了#号。

    • 加#号就是计算长度,不加就是输出值。

  • 数组切片:

    • ${array[@]:offset:number}:表示从下标为offset开始取,取number个元素

    • ${array[@]:offset}:从下标为offset开始取,取到数组最后

  • 向数组中追加元素:array[${#array[*]}]=value

  • 删除数组中某个元素:unset array[index],删除后这个位置会变成空

  • 关联数组:类似于key-value键值对

    • array=([name1]=value1 [name2]=value2)

Shell字符串的操作

  • 字符串切片:

    • ${str:offset:number}:从offset开始取,取number个

    • ${str: -length}:从字符串右侧开始取,取length个

  • 字符串截取子串,声明str=/temp/data/sc,用作示例

    • ${str#*word}:从左到右,查找str字符串中第一次匹配到的word字符,删除字符串开头到第一次出现word的地方之间的所有字符。

      • 例,${str#*t},输出:emp/data/sc

    • ${str##*word}:同上,不过是删除从字符串开头到最后一次匹配到word的地方。

      • 例,${str##*t},输出:a/sc

    • ${str%word*}:从右至左,查找str字符串中第一次匹配到的word字符,删除字符串的最后一个字符到word第一次出现的地方之间的所有字符串。

      • 例,${str%t*},输出:/temp/da

    • ${str%%word*}:同上,不过是删除从最后一个字符串到最后一次匹配到word字符之间的所有字符串。

      • 例,${str%%t*},输出:/

  • 字符串的查找替换:user=$(head -1 /etc/passwd),即user=root:x:0:0:root:/root:/bin/bash

    • ${str/pattern/replace}:查找str所表示的字符串中第一次被pattern匹配的字符串,替换成replace

      • echo ${user/root/ROOT},输出:ROOT:x:0:0:root:/root:/bin/bash

    • ${str//pattern/replace}:查找str所表示的字符串中所有被pattern匹配的字符串,替换成replace

      • echo ${user//root/ROOT},输出:ROOT:x:0:0:ROOT:/ROOT:/bin/bash

    • ${str/#pattern/replace}:查找行首被pattern匹配的字符串,并使用replace替换匹配到的字符串

    • ${str/%pattern/replace}:查找行尾pattern匹配的字符串,并使用replace替换匹配到的字符串

  • 字符串的删除:

    • ${str/pattern}:删除第一次被pattern匹配到的字符串。

    • ${str//pattern}:同查找替换

    • ${str/#pattern}:

    • ${str/%pattern}:

  • 字符的大小转换:

    • ${str^^}:把str中所有小写字母转换成大写

    • ${str,,}:把str中所有大写字母转换成小写

  • 变量的赋值:

    • ${str:-value}:如果变量str为空或不存在,返回value,否则返回str的值。

    • ${str:=value}:如果变量str为空或不存在,把value的值赋给str,并返回。否则返回str的值

    • ${str:+value}:如果变量str不为空,则返回value,否则,什么也不做。

    • ${str:?error_info}:如果变量str为空或不存在,则返回错误信息。是以错误输出流的方式返回。否则,返回str的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值