第二周作业

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


索引数组: 索引的编号从0开始,属于数值索引
关联数组: 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引

##数组声明

#普通数组可以不事先声明,直接使用
示列:
weekdays[0]="Sunday"
weekdays[4]="Thursday"

#显式的声明索引数组
declare -a ARRAY_NAME

#关联数组必须先声明,再使用
declare -A ARRAY_NAME

##数组赋值

(1) 一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE

示列:
weekdays[0]="Sunday"
weekdays[4]="Thursday"


(2) 一次赋值全部元素

ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)

示列:
title=("ceo" "coo" "cto")
num=({0..10})
alpha=({a..g})
file=( *.sh )

##定义关联数组

declare -A m74 --定义关联数组
m74[birth]="2023.02.24" --给特殊命令赋值
m74[num]=60
m74[classroom]=room3
m74[monitor]=zhangzong
echo ${m74[num]} --输出值
60

##字符串处理

#截取字符
var=abcde --定义变量
echo ${#var} --输出字符长度

var=abcde我 --重新定义变量
echo ${var:2} --值:cde我
echo ${var:2:3} --值:cde
echo ${var:-3} --值:abcde我
echo ${var: -3} --值:de我
echo ${var:2:-3} --值:c
echo ${var:2:-2} --值:cd
echo ${var:-2:-3} --值:abcde我
echo ${var: -2:-3} --超出范围:-bash: -3: substring expression < 0
echo ${var: -3:-2} --值:d
echo ${var: -3:-1} --值:de
unset var


#删除字符
描述:通过最后指定"字符"搜索,前面的字符删除!

懒惰模式:
url=http://www.magedu.org:8080/index.html --定义变量
echo ${url#*/} --值:/www.magedu.org:8080/index.html
echo ${url#*:} --值://www.magedu.org:8080/index.html
unset url

贪婪模式:
nginx_url=http://nginx.org/download/nginx-1.22.1.tar.gz --定义nginx下载页
wget $nginx_url
echo ${nginx_url##*/} --值:nginx-1.22.1.tar.gz

tar xf ${nginx_url##*/} --高级用法中实现解压
unset nginx_url

排除或替换字符:
url=http://www.magedu.org:8080/index.html --定义变量
echo ${url%"/*}" --值:http://www.magedu.org:8080
echo ${url%%"/*}" --值:http:
echo ${url%%:*} --值:http
echo ${url/magedu/wang} --替换:http://www.wang.org:8080/index.html
echo ${url/80/90} --部分替换:http://www.magedu.org:9080/index.html
echo ${url//80/90} --全替换:http://www.magedu.org:9090/index.html
echo ${url/8080} --全删除:http://www.magedu.org:/index.html
echo ${url/:8080} --全删除:http://www.magedu.org/index.html
echo ${url^^} --转大写:HTTP://WWW.MAGEDU.ORG:8080/INDEX.HTML
unset url

##高级变量使用

变量配置方式      str没有配置    str为空字符串     str已配置非空字符串
var=${str-expr}    var=expr             var=                  var=$str

上图说明:var=${str-expr} 表示变量的值是通过str变量和expr变量取得值
var=expr 表示str变量没有配置,则 var=expr
var= 表示str为空值,则var= 空
var=$str 表示str已配置,则 var=$str
-------------------------

示列:
#高级变量中三种模式:
name="ceo"; title=${name-"cto"};echo $title --值:ceo
name=""; title=${name-"cto"};echo $title --值: 空
unset name; title=${name-"cto"};echo $title --值:cto

 

2. 求10个随机数的最大值与最小值。

#编写脚本


vim random.sh
--
#!/bin/bash

#生成0~100的随机数,并min 和 max比较大小
declare -i min max
declare -a nums
for((i=0;i<10;i++));do
#nums[$i]=$RANDOM
nums[$i]=$[RANDOM%100+1]
[ $i -eq 0 ] && min=${nums[0]} && max=${nums[0]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "ALL numbers are ${nums[*]}"
echo Max is $max
echo Min is $min
--

#执行脚本
bash random.sh

3. 使用递归调用,完成阶乘算法实现。

#计算20的阶乘是多少
    注意:超出shell最大可用字符,将输入0

#编写脚本

vim fact_fun.sh
--
fact () {
if [ $1 -eq 1 ];then
echo $1
else
echo $[$1*$(fact $[$1-1])]
fi

}
fact 20
--

#执行脚本
bash fact_fun.sh

4. 解析进程和线程的区别?

 

 

 

#基础知识
什么是进程:系统把程序(copy 一份至内存中,实现打开一个进程,复制多份、就实现了多进程!)
什么是线程:一个进程中允许多个线程(1.线程共享进程中所有公共资源,当然、线程也有自己独立的私有资源;

单线程和多线程的区别:多个任务时,单线程只能排队一个一个完成,,多线程时,相当于一个工厂有多个工人干活!)

进程与线程的区别:
1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
,进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进
,程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
3. 调度和切换:线程上下文切换比进程上下文切换要快得多。

 

5. 总结内核设计流派及特点。
宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux

把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,
Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点

微内核(micro kernel):Windows,Solaris,HarmonyOS

简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每
种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差

 

6. 总结centos 6 启动流程,grub工作流程

 

POST加电自检阶段-->
GRUB1阶段MBR446-->
GRUB1.5MBR之后的空间(提供grub2文件所有分区的文件系统-->
GRUB2阶段(grub.conf)-->
kernel(initramfs.img 此关键文件存放在整个磁盘的最后一个扇区中)-->
进入根分区-->
/sbin/init(系统第一个进程)-->
/etc/inittab(读取配置文件模式)-->
/etc/rc.sysinit(初始化脚本)-->
/etc/rc.d/rc(判定次序)-->
/etc/rcN.d/K,S(/etc/init.d/)(真实次序状态)-->
/etc/rc.local(后启动)-->
login登录。

 

posted @ 2023-03-27 23:26  绿杉  阅读(39)  评论(0)    收藏  举报