examination
2025/11/3:84
- 两种回到家目录的命令
cd / cd ~
- shell编程中$#是什么?
- 参数的个数
- shell变成中$@是什么?
- 参数单独展开。补充:$*是参数集中为一个字符串
- 在配置网卡中,让网卡配置永久生效的两个命令?
- nmtui / nmcli
- 启动nginx服务的两种方式?
- systemctl start nginx / nginx
- 查找命令属于哪个软件包。
- dnf provides ifconfig / yum provides ifconfig
- 查看系统开启了哪些服务。
- ss -tulpn / systemctl list-units | grep running | wc -l
- visudo的作用
- 修改哪些用户能执行root命令,编辑完exit退出
2025/11/12:开卷
- 提取 access.log 中所有 URL(如 /index.html、/cart),只保留 URL 部分
sed -r 's#.* (/.*) HTTP.*#\1#' access.log
在做这种用sed替换的题时,一定要明确的将被提取字段左右的字符明确指出,否则会导致匹配到其他,比如根据源文件中内容,没一行的URL后都有空格和HTTP, 那么就要将他们公共的部分明确指出
shell编程题。需要特别注意几个点
- 数组里面的内容用空格隔开,不是用逗号,并且括号使用小括号()
- 在进行数值比对的时候,可以用(($a > 1))的形式来,简单好用,里面也可以进行逻辑运算
- echo中引用变量的话,不能用单引号,要用双引号在第二个计算平均值的方式还可以用awk编程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SCORE=(9 18 28 33 45 67 78 82 89 98 92)
getScoreLevel(){
echo '成绩----等级'
for score in "${SCORE[@]}";do
if (( score > 90 ));then
echo "$score A"
elif (( score >= 60 && score <= 80 ));then
echo "$score B"
elif (( score >= 50 && score <= 60 ));then
echo "$score C"
else
echo "$score D"
fi
done
}
SUM=0
COUNT=0
getAvg(){
for score in "${SCORE[@]}";do
SUM=$((score+SUM))
COUNT=$((COUNT+1))
done
AVG=$(echo "scale=2;$SUM/$COUNT" | bc)
echo "平均分:$AVG"
}
getAvg1
2
3
4
5
6
7
8
9
10
11# 用 awk 遍历数组、累加总分、计算平均分(保留2位小数)
avg=$(awk -v arr="${SCORE[*]}" '
BEGIN {
split(arr, scores, " "); # 将数组字符串拆分为 awk 数组
sum = 0;
count = length(scores); # 获取数组长度(人数)
for (i in scores) sum += scores[i]; # 累加总分
printf("%.2f", sum / count); # 浮点计算并格式化输出
}')
echo "平均分:$avg"






