2025/11/3:84

  1. 两种回到家目录的命令
  • cd / cd ~
  1. shell编程中$#是什么?
  • 参数的个数
  1. shell变成中$@是什么?
  • 参数单独展开。补充:$*是参数集中为一个字符串
  1. 在配置网卡中,让网卡配置永久生效的两个命令?
  • nmtui / nmcli
  1. 启动nginx服务的两种方式?
  • systemctl start nginx / nginx
  1. 查找命令属于哪个软件包。
  • dnf provides ifconfig / yum provides ifconfig
  1. 查看系统开启了哪些服务。
  • ss -tulpn / systemctl list-units | grep running | wc -l
  1. visudo的作用
  • 修改哪些用户能执行root命令,编辑完exit退出

2025/11/12:开卷

  1. 提取 access.log 中所有 URL(如 /index.html、/cart),只保留 URL 部分
    sed -r 's#.* (/.*) HTTP.*#\1#' access.log
    在做这种用sed替换的题时,一定要明确的将被提取字段左右的字符明确指出,否则会导致匹配到其他,比如根据源文件中内容,没一行的URL后都有空格和HTTP, 那么就要将他们公共的部分明确指出

shell编程题。需要特别注意几个点

  1. 数组里面的内容用空格隔开,不是用逗号,并且括号使用小括号()
  2. 在进行数值比对的时候,可以用(($a > 1))的形式来,简单好用,里面也可以进行逻辑运算
  3. echo中引用变量的话,不能用单引号,要用双引号
    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
    #!/bin/bash
    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"
    }

    getAvg

    在第二个计算平均值的方式还可以用awk编程
    1
    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"