第四周作业

本文介绍了Bash shell中的高级特性,包括数组的声明、赋值与引用,字符串处理方法,如切片和模式匹配,以及变量扩展和高级变量赋值。还探讨了间接变量引用和内存管理中的进程与线程概念,以及Linux系统中的进程状态和管理。此外,文章提到了进程间通信(IPC)、远程过程调用(RPC)以及Linux启动流程的相关知识。
摘要由CSDN通过智能技术生成

1. 使用while read line和/etc/passwd,计算用户id总和。

#!/bin/bash
sum=0
while read line ;do
        if [[ "$line" =~ /sbin/nologin$ ]] ;then
		uid=$(echo $line | cut -d: -f3)
		sum=$(($sum+$uid))
        fi

done < /etc/passwd
echo "用户id的总和为:$sum"

2. 总结索引数组和关联数组,字符串处理,高级变量使用及示例。

数组名和索引:

  • 索引的编号从0开始,属于数值索引
  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
  • bash的数组支持稀疏格式(索引不连续)

声明数组:

      #普通数组可以不事先声明,直接使用

          declare  -a  ARRAY_NAME

     #关联数组必须先声明,再使用

          declare  -A  ARRAY_NAME

       注意:两者不可相互转换

数组赋值:

  • 一次只赋值一个元素:ARRAY_NAME[INDEX]=VALUE

       例如:

       weekdays[0]="Sunday"

       weekdays[4]="Thursday"

  • 一次赋值全部元素:ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
    例如:
    title=("ceo" "coo" "cto")
    num=({0..10})
    alpha=({a..g})
    file=( *.sh )
  • 只赋值特定元素:ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
  • 交互式数组值对赋值:read  -a  ARRAY

显示所有数组:declare  -a

引用数组:

  • 引用特定的数组元素
    ${ARRAY_NAME[INDEX]}      #如果省略[INDEX]表示引用下标为0的元素
  • 引用数组所有元素
    ${ARRAY_NAME[*]}
    ${ARRAY_NAME[@]}
  • 数组的长度,即数组中元素的个数
    ${#ARRAY_NAME[*]}
    ${#ARRAY_NAME[@]}
  • 数组的所有下标
    ${!ARRAY_NAME[*]}
    ${!ARRAY_NAME[@]}

删除数组:

  • 删除数组中的某元素,会导致稀疏格式
    unset  ARRAY[INDEX]
  • 删除整个数组
    unset  ARRAY

数组数据处理:

  • 数组切片
    ${ARRAY[@]:offset:number}
    ${ARRAY[*]:offset:number}

    offset         #要跳过的元素个数
    number     #要取出的元素个数
    #取偏移量之后的所有元素
    {ARRAY[@]:offset}
    {ARRAY[*]:offset}
  • 向数组中追加元素
    ARRAY[${#ARRAY[*]}]=value
    ARRAY[${#ARRAY[@]}]=value

关联数组:必须先声明再调用
       declare  -A  ARRAY_NAME

       ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)

字符串处理:

  • 字符串切片
    (1)基于偏移量取字符串
    #返回字符串变量var的字符的长度,一个汉字算一个字符
    ${#var}
    #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分, offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
    ${var:offset}
    #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
    ${var:offset:number}
    #取字符串的最右侧几个字符,取字符串的最右侧几个字符, 注意:冒号后必须有一空白字符
    ${var: -length}
    #从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容,即:掐头去尾
    ${var:offset:-length}
    #先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-length 前空格,并且length必须大于offset
    ${var: -length:-offset}
    (2)基于模式取子串
    #其中word可以是指定的任意字符,自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字 符串开头至第一次出现word字符串(含)之间的所有字符,即懒惰模式,以第一个word为界删左留右
    ${var#*word}
    #从var变量的值中删除以word开头的部分
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑哈哈666

您的鼓励是我创作的源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值