《Linux系统与网络管理》复习题库---shell编程题

1、shell 编程题:在根目录下有四个文件 m1.c,m2.c,m3.c,m4.c,用 Shell 编程,实现自动创建 m1,m2,m3,m4 四个目录,并将 m1.c,m2.c,m3.c,m4.c 四个文件分别剪贴到各自相应的目录下。

#!/bin/bash
# 创建四个目录 
mkdir m1 m2 m3 m4 
# 剪切文件到对应目录 
mv m1.c m1/ 
mv m2.c m2/ 
mv m3.c m3/ 
mv m4.c m4/ 
echo "文件剪切完成!"

注:Shell 脚本在执行时有两个格式上的要求:以 #!/bin/bash 开头、必须有可执行权限。 

2、shell 编程题:用 Shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下。

#!/bin/bash

if [ $# -ne 1 ]; then
    # 检查参数数量是否正确
    echo "参数错误!请传入一个文件路径作为参数。"
    exit 1
fi

if [ ! -e "$1" ]; then
    # 检查文件是否存在
    echo "文件 $1 不存在,请检查路径是否正确。"
    exit 1
fi

if [ -c "$1" ]; then
    # 检查文件类型是否为字符设备文件
    cp "$1" /dev
    echo "文件 $1 已成功拷贝到 /dev 目录下。"
else
    echo "文件 $1 不是字符设备文件,无需拷贝。"
fi

注:$n  //n 为数字,$0 代表命令本身,$1-9 代表第 1 到第 9 个参数,10 以上的参数需要用大括号包含如 ${10}
        $*  //代表命令行中的所有参数,$* 将所有参数看成一个整体
        $@  //这个变量也可以代表命令行中的所有参数,不过 $@ 把每个参数区分对待
        $#  //代表命令行中所有参数的个数

        

        判断两个字符串

=  //相等

        判断两个整数

-lt  //小于
-le  //小于等于
-eq  //等于
-gt  //大于
-ge  //大于等于
-ne  //不等于

        按照文件权限进行判断

-r  //有读的权限
-w  //有写的权限
-x  //有执行的权限

        按照文件类型进行判断

-f  //文件存在并且是一个常规的文件
-e  //文件存在
-d  //文件存在并是一个目录

        if 语句的基本语法如下,需要注意 [ 条件判断式 ] 中括号与判断式之间必须有空格

#单分支
if [ 条件判断式 ]
    then
    代码
fi

#多分支
if [ 条件判断式 ]
    then
    代码
elif [ 条件判断式 ]
    then
    代码
fi

3、shell 编程题:编写一个名为 del 的脚本程序,先检查所给文件是否存在。如果文件不存在,请给出提示;如果存在,完成对其的完整删除。

#!/bin/bash 
if [ $# -ne 1 ]; 
    then 
    # 检查参数数量是否正确 
    echo "参数错误!请传入一个文件路径作为参数。" 
    exit 1 
fi 
if [ ! -e "$1" ]; 
    then 
    # 检查文件是否存在 
    echo "文件 $1 不存在,请检查路径是否正确。" 
    exit 1 
fi 
rm -rf "$1" 
# 删除文件 
echo "文件 $1 已成功删除。"

4、shell 编程题:编写一个名为 copy 的脚本程序,格式 copy。如果 file1 不存在,请提示;如果 file2 不存在,创建它。

#!/bin/bash

if [ $# -ne 2 ]; then
    # 检查参数数量是否正确
    echo "参数错误!请传入两个参数:源文件和目标文件。"
    exit 1
fi

if [ ! -f "$1" ]; then
    # 检查源文件是否存在
    echo "源文件 $1 不存在,请检查路径是否正确。"
    exit 1
fi

if [ ! -f "$2" ]; then
    # 检查目标文件是否存在,如果不存在则创建
    touch "$2"
fi

cp "$1" "$2"
# 复制源文件到目标文件
echo "文件已成功复制从 $1 到 $2。"

5、shell 编程题:编写一个名为 mul 的脚本程序,参数为一小于 10 的正整数。先检查参数是否符合要求。如果不符合要求,请给出提示;如果符合要求,分别输出其与 1 到 9 的乘积。

#!/bin/bash

if [ "$1" -le 0 ] || [ "$1" -ge 10 ]; then
    # 检查参数是否存在且小于 10
    echo "参数错误!请输入一个小于 10 的正整数作为参数。"
    exit 1
fi

num="$1"
for i in {1..9}; do
    # 输出乘积结果
    mul=$((num * i))
    echo "$num x $i = $mul"
done

注:for 循环有两个基本语法,语法一: 

for 变量 in 值1 值2 值3...
do
    程序
done

语法二:

for((初始值;循环控制条件;变量变化))
do
    程序
done 

在定义变量时变量名称可以由字母、数字和下划线组成,但不能以数字开头;等号的两侧不能有空格;变量名称一般为大写。

将命令的返回值赋给变量时使用如下写法;

  • A=`data`,表示运行 ` ` 中的命令,并把结果返回给 A;
  • A=$(data),$() 相当于 ``。

在 Shell 编程中有各种运算操作,语法格式为 $((运算式)) 或 $[运算式] 或者 expr m + n;如果希望将 expr 的值赋给某个变量,使用 `` 即可。

6、shell 编程题:编写一个名为 check 的脚本程序,参数为一小于 100 的正整数。先检查参数是否符合要求。如果不符合要求,请给 出提示;如果符合要求,检查其是否为素数,并给出结果“This is a prime number”或“This is not a prime number”。

#!/bin/bash

if [ $# -eq 0 ] || [ "$1" -ge 100 ] || [ "$1" -le 0 ]; then
    # 检查参数是否存在且小于 100
    echo "参数错误!请输入一个小于 100 的正整数作为参数。"
    exit 1
fi

is_prime=true
for ((i=2; i<$1; ++i)); do
    # 判断该数是否为素数
    if (( $1 % $i == 0 )); then
        is_prime=false
        break
    fi
done

if $is_prime; then
    # 给出判断结果
    echo "This is a prime number."
else
    echo "This is not a prime number."
fi

7、shell 编程题:编写一个名为 cubic 的脚本程序,参数为一小于 20 的正整数。先检查参数是否符合要求。如果不符合要求,请给 出提示;如果符合要求,输出从 1 到该正整数的立方值。

#!/bin/bash

if [ $# -eq 0 ] || [ "$1" -gt 20 ]; then
    # 检查参数是否存在且小于 20
    echo "参数错误!请输入一个小于 20 的正整数作为参数。"
    exit 1
fi

for ((i=1; i<=$1; i++)); do
    # 循环计算并输出立方值
    cubic=$((i * i * i))
    echo $cubic
done

8、shell 编程题:编写一个 shell 脚本,它使得能够显示下面序列的前 20 个数字。0,1,1,2,3,5,8,13…,前二个数字之和为第三个 数字,即著名的 Fibonacci 序列。

#!/bin/bash

num1=0
num2=1
# 初始化前两个数字
echo $num1
echo $num2
# 显示前两个数字

for ((i=3; i<=20; i++)); do
    # 循环计算并显示后面的数字
    num=$((num1 + num2))
    # 计算当前数字
    echo $num
    # 显示当前数字
    num1=$num2
    num2=$num
    # 更新前两个数字,向前移动计算窗口
done

9、编写 shell 脚本,计算 1 到 10 的阶乘。

#!/bin/bash

sum=1

for num in {1..10..1}; do
    let sum=$sum*$num
done

echo $sum

注:在Bash脚本中,for循环的条件语句最后可以选择性地添加分号。 

10、编写 shell 脚本,实现:输入一个文件名,判断其是否为普通文件。

#!/bin/bash

echo "Enter a file name:"
read file

if [ -f $file ]; then
    echo "File $file exists."
fi

注:在我们进行 Shell 编程的时候,有时候也需要跟控制台进行交互,比如用户动态的输入一些数据,这个时候就需要用到 read

基本语法为:read(选项)(参数)

  • -p 制定读取值时的提示符
  • -t 指定读取值时的等待时间,如果没有在规定时间内输入,则不再等待。

11、添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx,其中 xx 从 01 到 30。

#!/bin/sh

i=1

groupadd class1
while [ $i -le 30 ]
do
    if [ $i -le 9 ]; then
        USERNAME=stu0${i}
    else
        USERNAME=stu${i}
    fi
    useradd $USERNAME
    mkdir /home/$USERNAME
    chown -R $USERNAME /home/$USERNAME
    chgrp -R class1 /home/$USERNAME
    i=`expr $i + 1`
    # 或 i=$(($i + 1)) 或 let "i=i+1"
done

注:while循环的格式:

while [ 条件判断式 ]
do
程序
done

12、编写 shell 程序,实现自动删除 50 个用户账号的功能。账号名为 stud1 至 stud50。

#!/bin/sh

i=1

while [ $i -le 50 ]; do
    userdel -r stud$i
    sum=`expr $i + 1`
    i=$sum
done

if [ $? -eq 0 ]; then
    echo "remove successful!"
else
    echo "remove failed!"
fi

13、下面给出了一个 SHELL 程序,按照其行后有#(n)形式的语句解释,补充程序,并执行程序

#!/bin/bash
#(1)使用/bin/bash 解释脚本
dir=$1
#(2)将位置变量 1 赋值给变量 dir
if [ -d $dir ]
#(3)如果 dir 所指为目录
then
    cd $dir
    #(4)将当前目录改为 dir
    for file in *
    do
        if [ -f $file ]
        #(5)如果循环变量 file 所指是普通文件
        then
            cat $file
            #(6)显示文件 file 的内容
            echo "remove successful!"
        fi
    done
else
    echo "bad directory name $dir"
fi

14、试编写一个 SHELL 程序,该程序能接收用户从键盘输入的 100 个整数,然后求出其总和、最大值及最小值。

#!/bin/sh
read max
min=$max
sum=$max

i=1
while [ $i -lt 100 ]
do
    read x
    sum=`expr $sum + $x`
    if [ $max -lt $x ]
    then
        max=$x
    fi
    if [ $x -lt $min ]
    then
        min=$x
    fi
    i=`expr $i + 1`
done
echo "sum = $sum ; max = $max ; min = $min"

15、编写 1 个弹出式菜单的 shell 程序并实现其简单的菜单功能:即用户按下数字 1,则提示用户输入源和目的文件名后执行复制;输入数字 2, 则提示用户输入要更名的文件或目录后执行更名操作; 输入数字 3,则提示用户 输入要删除的文件并执行删除操作;输入数字 4,则提示用户输入要查找的文件 并执行查找操作;输入数字 5,则退出该菜单 shell 程序的执行。

#!/bin/sh
clear
while [ 0 ]; do
    echo "************************************************"
    echo " menu "
    echo " 1.copy "
    echo " 2.rename "
    echo " 3.remove "
    echo " 4.find "
    echo " 5.exit "
    echo "************************************************"
    echo -n "select: "
    read choice
    case $choice in
        1)
            echo -n "source file: "
            read src
            echo -n "destination folder: "
            read des
            cp -arf $src $des
            if [ $? -eq 0 ]; then
                echo "copy successful!"
            else
                echo "copy failed"
            fi
            ;;
        2)
            echo -n "the file to be renamed: "
            read src
            echo -n "the new file: "
            read des
            mv $src $des
            if [ $? -eq 0 ]; then
                echo "rename successful!"
            else
                echo "rename failed"
            fi
            ;;
        3)
            echo -n "the file to be removed: "
            read src
            rm -rf $src
            if [ $? -eq 0 ]; then
                echo "remove successful!"
            else
                echo "remove failed"
            fi
            ;;
        4)
            echo -n "the file to be found: "
            read src
            find $HOME -name $src
            ;;
        5)
            exit
            ;;
        *)
            echo "Invalid option"
            ;;
    esac
done

注:case语法规则

case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
......
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac 

16、用 Shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下。 

#!/bin/bash

FILENAME=$1
if [ -c "$FILENAME" ]; then
    cp "$FILENAME" /dev
fi

17、编写 shell 程序,实现自动删除 50 个账号的功能。账号名为 stud1 至 stud50。

#!/bin/sh

i=1

while [ $i -le 50 ]; do
    userdel -r stud${i}
    i=$(($i+1))
done

18、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午 4:50 删除/abc 目录下的全部子目录和全部文件;
(2)从早 8:00~下午 6:00 每小时读取/xyz 目录下 x1 文件中每行第一个域的全部数据加入到/backup 目录下的 bak01.txt 文件内;
(3)每逢星期一下午 5:50 将/data 目录下的所有目录和文件归档并压缩为文件:backup.tar.gz; (4)在下午 5:55 将 IDE 接口的 CDROM 卸载(假设:CDROM 的设备名为 hdc);
(5)在早晨 8:00 前开机后启动。

#!/bin/bash 

# 1. 在下午 4:50 删除/abc 目录下的全部子目录和全部文件 
rm -rf /abc/* 

# 2. 从早 8:00~下午 6:00 每小时读取/xyz 目录下 x1 文件中每行第一个域的全部数据加入到/backup 目录下的 bak01.txt 文件内 
if [[ $(date +%H) -ge 8 && $(date +%H) -lt 18 ]]; then 
    awk '{print $1}' /xyz/x1 >> /backup/bak01.txt 
fi 

# 3. 每逢星期一下午 5:50 将/data 目录下的所有目录和文件归档并压缩为文件:backup.tar.gz 
if [[ $(date +%u) -eq 1 && $(date +%H:%M) == "17:50" ]]; then 
    tar -zcf /backup/backup.tar.gz /data/* 
fi 

# 4. 在下午 5:55 将 IDE 接口的 CDROM 卸载(假设:CDROM 的设备名为 hdc) 
if [[ $(date +%H:%M) == "17:55" ]]; then 
    eject /dev/hdc 
fi 

将上述代码保存为一个名为 daily_tasks.sh 的文件,并赋予执行权限。然后,可以使用 crontab -e 命令编辑 cron 任务,并添加以下行到文件的末尾,以在早晨 8:00 前开机后启动脚本:

@reboot /path/to/daily_tasks.sh

请将 /path/to/daily_tasks.sh 替换为实际的脚本路径。 请注意,上述脚本中的时间判断是基于当前系统时间进行的。确保脚本和路径都正确,并有足够的权限执行所需的操作。

19、设计一个 Shell 程序,在/userdata 目录下建立 50 个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权限为: 读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

#!/bin/sh

i=1

while [ $i -le 50 ]; do
    if [ -d /userdata ]; then
        mkdir -p /userdata/user$i
        chmod 754 /userdata/user$i
        echo "user$i"
        i=$((i+1))
    else
        mkdir /userdata
        mkdir -p /userdata/user$i
        chmod 754 /userdata/user$i
        echo "user$i"
        i=$((i+1))
    fi
done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/281141.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Termius for Mac/Win:一站式终端模拟器、SSH 和 SFTP 客户端软件的卓越选择

随着远程工作和云技术的普及&#xff0c;对于高效安全的远程访问和管理服务器变得至关重要。Termius&#xff0c;一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件&#xff0c;正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案&#xff0c;允许用户通过单一平…

英语长难句分享第十五天解析

群公告 长难句分享第十五天解析 【词汇】&#xff1a; • mispredict [ˌmɪsprɪˈdɪkt] v. 错误预测 • mechanical [məˈknɪkl] adj. 机械的 • everyday [ˈevrideɪ] adj. 日常的 • helicopter [ˈhelɪkɑːptər] n. 直升机 • eventually [ɪˈventʃuəli] adv. …

AI 开发必看的 6 款开源矢量数据库

你好&#xff0c;我是坚持分享干货的 EarlGrey&#xff0c;翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助&#xff0c;请关注我&#xff0c;一起向上进击。 创作不易&#xff0c;希望大家给一点鼓励&#xff0c;把公众号设置为…

starrocks集群fe/be节点进程守护脚本

自建starrocks集群&#xff0c;有时候服务会挂掉&#xff0c;无法自动拉起服务&#xff0c;于是采用supervisor进行进程守护。可能是版本的原因&#xff0c;supervisor程序总是异常&#xff0c;无法对fe//be进行守护。于是写了个简易脚本。 #!/bin/bash AppNameFecom.starrock…

jmeter接口测试02

jmeter接口测试02 新增测试计划用户自定义变量http请求默认值http头部管理器线程组HTTP请求HTTP响应断言 创建查看结果树和总结报告启动线程组&#xff0c;查看结果树和总结报告 新增测试计划 用户自定义变量 定义测试计划常用的变量 例如token、接口的ip、端口等。 http请求…

cargo(rust包管理) 常见命令、包检索 (windows+linux)

rust环境和开发环境配置&#xff1a;rust开发环境配置 winlinux Cargo是Rust的构建系统和包管理器。 如果你的能力足够强也愿意&#xff0c;可以不用cargo进行rust开发&#xff0c;即从头开始敲代码 一、cargo包相关查询 1.查找包 查找cargo包链接&#xff1a;crates.io …

视频编辑与制作,视频尺寸修改器

你是否曾因为视频尺寸与平台不匹配无法上传而烦恼&#xff1f;这个时候一款视频尺寸修改工具&#xff0c;就能帮你轻松搞定。不论是为了适应不同的平台要求&#xff0c;还是为了获得不一样的观看体验&#xff0c;【视频剪辑高手】都能为你提供完美的解决方案。 所需工具&#…

layui表格中预览视频和图片

全代码 <!DOCTYPE html> <html><head><title>Layui&#xff1a;数据表格table中预览图片、视频</title><meta charset"utf-8"/><link rel"stylesheet" href"../dist/css/layui.css"><style>&l…

Python 下载与安装

1、下载 打开Python官网&#xff1a;Welcome to Python.org 点击下图所示的【Downloads】按钮进入下载页面。 ​ 进入下载页面后下拉至下图位置&#xff0c;选择版本&#xff0c;点击下载按钮下载。 页面会跳转至下一页下载页面&#xff0c;下拉到下图位置&#xff0c;选择…

【实用工具】Gradio快速部署深度学习应用1:图像分类

前言 在AI快速发展的今天&#xff0c;我们作为算法开发人员&#xff0c;也应该有一些趁手的工具帮助我们快速开发并验证自己的想法&#xff0c;Gradio可以实现快速搭建和共享的功能&#xff0c;能够展示出一个前端界面&#xff0c;把我们的算法包裹起来&#xff0c;快速验证算…

(JAVA)-(网络编程)-初始网络编程

网络编程就是在通信协议下&#xff0c;不同的计算机上运行的程序&#xff0c;进行的数据传输。 讲的通俗一点&#xff0c;就是以前我们写的代码是单机版的&#xff0c;网络编程就是联机版的。 应用场景&#xff1a;即时通信&#xff0c;网游对战&#xff0c;金融证券&#xf…

用通俗易懂的方式讲解大模型:使用 LangChain 封装自定义的 LLM,太棒了

Langchain 默认使用 OpenAI 的 LLM&#xff08;大语言模型&#xff09;来进行文本推理工作&#xff0c;但主要的问题就是数据的安全性&#xff0c;跟 OpenAI LLM 交互的数据都会上传到 OpenAI 的服务器。 企业内部如果想要使用 LangChain 来构建应用&#xff0c;那最好是让 La…

2024年【裂解(裂化)工艺】考试题库及裂解(裂化)工艺考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 裂解&#xff08;裂化&#xff09;工艺考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新裂解&#xff08;裂化&#xff09;工艺考试总结题目及答案&#xff01;多做几遍&#xff0c;其实通过裂解&#…

第3课 使用FFmpeg获取并播放音频流

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 FFmpeg作为一套庞大的音视频处理开源工具&#xff0c;其源码有太多值得研究的地方。但对于大多数初学者而言&#xff0c;如何快速利用相关的API写出自己想要的东西才是迫切需要…

关于“Python”Django 管理网站的核心知识点整理大全52

目录 注意 18.2.2 激活模型 settings.py 18.2.3 Django 管理网站 1. 创建超级用户 注意 2. 向管理网站注册模型 admin.py 注意 3. 添加主题 Climbing。 18.2.4 定义模型 Entry models.py 18.2.5 迁移模型 Entry 18.2.6 向管理网站注册 Entry admin.py 往期快速…

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

C:stack、queue、priority_queue增删查改模拟实现 前言一、Cstack的介绍和使用1.1 引言1.2 satck模拟实现 二、Cqueue的介绍和使用2.1 引言2.2 queue增删查改模拟实现 三、STL标准库中stack和queue的底层结构:deque3.1 deque的简单介绍(了解)3.2 deque的缺陷3.3 为什么选择dequ…

c++哈希表——超实用的数据结构

文章目录 1. 概念引入1.1 整数哈希1.1.1 直接取余法。1.1.2 哈希冲突1.1.2.1 开放寻址法1.1.2.2 拉链法 1.2 字符串哈希 3.结语 1. 概念引入 哈希表是一种高效的数据结构 。 H a s h Hash Hash表又称为散列表&#xff0c;一般由 H a s h Hash Hash函数(散列函数)与链表结构共同…

【代码随想录】刷题笔记Day42

前言 这两天机器狗终于搞定了&#xff0c;一个控制ROS大佬&#xff0c;一个计院编程大佬&#xff0c;竟然真把创新点这个弄出来了&#xff0c;牛牛牛牛&#xff08;菜鸡我只能负责在旁边喊加油&#xff09;。下午翘了自辩课来刷题&#xff0c;这次应该是元旦前最后一刷了&…

车载电子电器架构 —— 电子电气系统开发角色定义

车载电子电器架构 —— 电子电气系统开发角色定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文12000字,深度思考者进!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

鸿蒙应用开发 新闻数据加载

1 HTTP 数据请求概述 日常生活中我们使用应用程序看新闻、发送消息等&#xff0c;都需要连接到互联网&#xff0c;从服务端获取数据。例如&#xff0c;新闻应用可以从新闻服务器中获取最新的热点新闻&#xff0c;从而给用户打造更加丰富、更加实用的体验。 那么要实现这样一种…