注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971

友情提醒:仅供参考理解,请勿直接复制粘贴

友情提醒:仅供参考理解,请勿直接复制粘贴

友情提醒:仅供参考理解,请勿直接复制粘贴

文章目录

  • 第1题
  • 第2题
  • 第3题
  • 第4题
  • 第5题

第1题

1、编写一个文件名为square的脚本程序计算和输出一组正整数的平方和 ,参数为命令行输入的一组不大于20的正整数。

# square.shsum=0
for arg in $*
dosum=`expr ${sum} + ${arg} \* ${arg}`  # 算术运算符的乘号是 \*
done
echo ${sum}# 文件编辑完成后,使用格式如  ./square.sh 1 2 3 6 3

第2题

2、编写shell程序,对用户输入的用户名进行核对,若用户名为系统登录用户,显示欢迎信息(当前时间 用户名),否则显示非系统用户提示,重新输入(# 号退出)

# 02.sh# who命令找出系统中所有已登录用户相关信息
# awk命令切割出用户名
# 用()将每一个用户名其存入数组
users=(`who | awk '{printf "" $1}'`)# 用于接收用户输入的字符串str
str=""# 提示用户输入,并接收输入
echo "请输入系统登录用户的用户名:"
read str# 循环接收输入(判断#号有点坑,用[]说明这是一个判断表达式)
while ([ "${str}" != '#' ])
do# ${users[@]}形如:excious root unw# 对上述数组,使用grep命令,加上参数 -w 统计全单词匹配的有哪些列# 对上述grep命令统计结果,使用wc命令,加上参数 -w 统计匹配到的单词数,存入变量cntcnt=`echo "${users[@]}" | grep -w "${str}" | wc -w`# if判断if [ ${cnt} -gt 0 ]then# 匹配到了某个用户名,输出用户名和时间,退出程序echo "${str} "`date`breakelse# 未匹配到该用户名,提示非系统用户,要求重新输入echo "非系统用户,请重新输入"read strfi
done# 使用示例如下:
:<<EOF
【示例1】$ ./02.sh请输入系统登录用户的用户名:
exc
非系统用户,请重新输入
excious
excious 2021年 03月 28日 星期日 17:20:09 CST【示例2】$ ./02.sh请输入系统登录用户的用户名:
exc
非系统用户,请重新输入
#
EOF

第3题

3、编写一个shell程序,脚本文件名为 listfile,若命令行的若干参数是合法目录名,则程序显示这些目录下所有C语言源文件(扩展名为.c)的内容,否则显示错误的目录名信息。

# listfile.sh# Tips:如果不输入任何目录,会把当前目录作为默认的查找目录(这一点,可以对参数列表长度判断来修正,个人感觉没必要,默认当前目录就挺好的)
# 核心命令形如:find /home/excious/new/bash /home /home/excious -maxdepth 1 -name "*.c"# 记录不合法路径的数组
arr=()# 遍历每一个参数
for arg in $*
do# 使用shell的文件测试运算符测试参数中的目录是否存在if [ ! -d ${arg} ]then# 不存在的目录的路径名将被加入到数组arr中# 通过重新创建数组,实现追加新元素arr=("${arr[@]}" ${arg})fi
done# 根据不合法路径数组arr长度,判断是否存在不合法参数
if [ ${#arr[@]} -gt 0 ]
then# 存在,输出报错信息echo "共有${#arr[@]}个错误的目录参数如下:"for item in ${arr[@]}doecho -e "\t${item}"done
else# 不存在,可以输出全部的.c文件的信息cnt=`find $@ -maxdepth 1 -name "*.c" | wc -l`echo "共找到以下${cnt}个.c文件"find $@ -maxdepth 1 -name "*.c"  # (直接执行命令了,不用echo `命令`,不然带空格的文件名、用空格分隔,很难处理)
fi# 使用示例如下:
:<<EOF
【示例1】$ ./listfile.sh /home2 /home3 /home/excious/new /home/excious/te /home/excious/new/bash/home03 /home/excious/new/bash/my共有3个错误的目录参数如下:/home2/home3/home/excious/te【示例2】$ ./listfile.sh /home/excious/new /home/excious/new/bash/home03 /home/excious/new/bash/my共找到以下11个.c文件
/home/excious/new/test.c
/home/excious/new/test2.c
/home/excious/new/bash/home03/1.c
/home/excious/new/bash/home03/2.c
/home/excious/new/bash/home03/3.c
/home/excious/new/bash/home03/4.c
/home/excious/new/bash/home03/1 2.c
/home/excious/new/bash/my/a.c
/home/excious/new/bash/my/b.c
/home/excious/new/bash/my/c.c
/home/excious/new/bash/my/d.cEOF

第4题

4、请将基本命令1-2章作业 1 中编写的整型数组计算程序改写成有累加和与最大值两个函数模块的源程序项目文件(分模块)进行编译运行,可采用静态库和动态库方式。给出执行结果贴图(源文件,结果图)

附——1-2章作业1-4:

Linux命令操作:在自己的用户目录下建立一个子目录 proexam,在该子目录中建立 exam.c 和exmax.c两个C语言源文件,exam.c 用来输出整型数组 datalist 中的每个数据,exmax.c 用自定义函数 getmax( )输出该数组中的最大值,并用 cat 命令将这两个源文件合并成 exall.c 源文件。并进行编译调试运行(也可写出makefile文件)。

examfunc.h文件

#ifndef EXAMFUNC_H
#define EXAMFUNC_Hint sum(int []);
int max(int []);#endif

examfunc.c文件

#include "examfunc.h"int sum(int a[], int n) {int res = 0;for (int i = 0; i < n; ++i)res += a[i]return res;
}int max(int a[], int n) {int res = a[0];for (int i = 1; i < n; ++i)res = res > a[i] ? res : a[i];return res;
}

exam.c文件

#include "examfunc.h"
#include <stdio.h>int main() {int datalist[] = { 1, 2, 33, 4, 5};printf("数组的累加和为%d,数组的最大值为%d\n", sum(datalist, sizeof(datalist)/sizeof(int), max(datalist, sizeof(datalist)/sizeof(int));return 0;
}

04.sh文件

# 04.sh# 静态/动态编译相关知识可以参考博客https://blog.csdn.net/daidaihema/article/details/80902012gcc examfunc.c -c -I .
ar rcs examfunc.a examfunc.o
gcc exam.c -I . examfunc.a -o exam
./exam# 使用示例
#
# ./04.sh
#
# 数组的累加和为45,数组的最大值为33

运行截图

  • 运行脚本04.sh
  • 运行脚本04.sh

第5题

5、编写shell程序( 文件名 test_funcprg ),运用自定义函数sum()与max()计算一组整数数组的累加和与最大值,并按菜单选择输出相应计算结果。数组数据可由键盘读入,并以菜单方式运行(菜单选项:sum , max, exit)

# test_funcprg.sh# sum函数
sum() {# 提示用户输入数组数据arr=()read -p "请输入一个数组:" -a arr# 计算数组累加和res=0for num in ${arr[@]}dores=$((${res} + ${num}))done# 输出结果,等待用户返回菜单echo "数组的累加和为${res}(按回车开始返回菜单)"getch
}# max函数
max() {# 提示用户输入数组数据arr=()read -p "请输入一个数组:" -a arr# 计算数组累加和res=${arr[0]}for num in ${arr[@]}do# 三目运算符,相当于C语言里的 res = (res > num) ? res : numres=`[ ${res} -gt ${num} ] && echo ${res} || echo ${num}`done# 输出结果,等待用户返回菜单echo "数组的最大值为${res}(按回车开始返回菜单)"getch
}# 用于等待一个回车(或者其他输入)后清屏
getch() {readclear
}# 主函数
# 先清屏,打印菜单,等待输入
a=0
clear
while :
doecho "1.sum"echo "2.max"echo "3.exit"read -p "请输入你的选择:" acase ${a} in1)clearsum;;2)clearmax;;3)clearecho "您已退出"break;;*)clearecho "您输入的选项\"${a}\"有误(按回车开始返回菜单)"getch;;esac
done# 使用示例
:<<EOF$ ./test_funcprg.sh1.sum
2.max
3.exit
请输入你的选择:1请输入一个数组:1 22 124 53
数组的累加和为200(按回车开始返回菜单)1.sum
2.max
3.exit
请输入你的选择:2请输入一个数组:1 214 12 2 215 62 123
数组的最大值为215(按回车开始返回菜单)1.sum
2.max
3.exit
请输入你的选择:1241您输入的选项"1241"有误(按回车开始返回菜单)1.sum
2.max
3.exit
请输入你的选择:3您已退出EOF

《Linux编程》作业 ·002【Shell编程】相关推荐

  1. Linux知识点回顾之shell编程

    Linux知识点回顾之shell编程 shell编程 1 基本介绍 1.1 Shell 脚本 1.2 Shell 环境 1.3 第一个shell编程 1.4 运行 Shell 脚本有两种方法: 1.5 ...

  2. 《linux命令行与shell编程大全》--读书笔记

    1.初识Linux shell 图片链接 2.走进shell 1.进入命令行,CLI(command line interface),也叫Linux控制台 通过Linux控制台终端访问CLI Ctrl ...

  3. Linux高级命令和Shell编程

    1.Linux高级命令 该章节的所有操作都在/export/data/shell目录进行,请提前创建该目录. mkdir -p /export/data/shell/ 1.1.重定向命令 1.重定向& ...

  4. 第13章代码《跟老男孩学习Linux运维:Shell编程实战》

    本书历史上已出版最实战的Shell高级编程实战书籍,没有之一,和市面书籍不同,本书是作者经过18年的运维工作及教学工作后,创新类企业级实战书籍,适合所有学习及从事Linux相关工作的读者. <跟 ...

  5. Linux进阶之路———Shell 编程入门

    引言 通过 Shell 编程的学习,铺平架构师道路上的一块大砖. Shell 在Linux 系统中的定位如下所示: 一.第一个 Shell 脚本 我们通过一个简单的 Shell 脚本来感受一下. 在 ...

  6. linux系统编程shell,Linux系统中的 Shell 编程

    文章目录 一.Shell Script 介绍 1.概念 shell脚本是包含一系列命令的文本文件 shell读取此文件并执行命令 2.应用场景 重复性操作 批量事务处理 自动化运维 定时任务执行 3. ...

  7. 【Linux系统管理】10 Shell 编程进阶篇

    六 Shell 编程 6.1 正则表达式 6.1.1 概述 还记得我们在上一章说过正则表达式和通配符的区别(正则表达式用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名)吗?其实这种区别 ...

  8. 总结下linux中一些入门级shell编程实例

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  9. Linux 命令行与shell编程 第10章 构建基本脚本

    本章内容 构建基本脚本 使用多个命令 创建shell脚本文件 现在我们已经介绍了Linux系统和命令行的基础知识,可以开始编程了.本章讨论编写shell脚本的基础知识.在开始编写自己的shell脚本大 ...

  10. linux系列之-—01 shell编程笔记

    一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...

最新文章

  1. 做Java头发少_这35个Java代码优化细节,你用了吗
  2. java非递归方式实现快速排序
  3. 搭建好看的静态博客(使用Hexo进行搭建)
  4. python paramiko使用_使用python的paramiko模块实现ssh与scp功能
  5. mysql 分库分表的方法
  6. java 二维数组 floyd_Floyd算法(一)之 C语言详解
  7. Could not create a sandbox extension for /
  8. python采集抖音数据_DouYinSDK 抖音爬虫数据采集福音
  9. STM32工作笔记0067---SPI接口原理与配置
  10. MySQL多线程并发调优
  11. java自动推送百度收录_站点添加百度自动推送和360自动推送代码,让收录更快!...
  12. TypeError: __init__() got an unexpected keyword argument 'serialized_options'(安装protobuf 3.6.0)
  13. java 打开 覆盖文件_如何用JAVA实现文件的覆盖
  14. 计算不可压缩流体 -- 数学基础
  15. 长期听耳机有什么坏处?哪种类型的耳机对耳朵危害小?
  16. MMI笔记 virtual environments, audio for virtual environments 知识点总结
  17. MTK Android Led框架分析
  18. 谈一谈APP支付失败的处理
  19. Go组队学习 9.异常处理
  20. 我分析了上万个微信红包数据,得到了这些发现(附数据集)

热门文章

  1. idea中npm安装总结与node-sass依赖安装等常见问题避坑总结
  2. IPhone之NSXMLParser的使用
  3. nginx上安装mysql 性能_Linux安装Mysql及Nginx详细步骤
  4. Pandas时间索引的骚操作
  5. Java中用三种方法输出字符串_java中两个字符串连接的三种方法
  6. 考虑题4所示的日志记录_基于Log4Net实现日志信息双向存储
  7. 计算机类中外合作办学情况,郑州大学2021年河南省本科一批各专业录取分数统计...
  8. php输出源文件,apt-get 按照php7后apache 输出php源文件
  9. sklearn中SVM的可视化
  10. conda 安装指定版本tensorflow cpu/gpu