基础的shell编程问题(一)

文章目录

  • 题目一
    • 题目描述
    • 代码实现
      • 关于$#的有关内容
    • 实测
    • 本程序的作用
  • 题目二
    • 题目描述
    • 代码实现
    • 注释
    • 关于argc、argv
    • 关于read函数
      • 关于文件描述符
    • 关于write函数
    • 本程序的作用
  • 题目三
    • 题目描述
    • 代码实现
    • 实测
    • 关于grep命令
    • 关于read命令
  • 题目四
    • 题目描述
    • 代码实现
    • 关于test命令
    • 实测


题目一

题目描述

请给下面的shell程序加注释,并说明程序的运行结果。


代码实现

#!/bin/bash
#bash script programming
if test $# == 0 # 参数个数为0(没有给出参数)
thenls -l|grep '^d'   # 寻找并显示当前目录中以d开头的字符串,即目录文件
else  # 参数个数不为0(给出了参数)for idols -l $i|grep '^d'  # 寻找并显示给出的目录中以d开头的字符串,即目录文件done
fi

关于$#的有关内容

$# 表示命令行上参数的个数,但不包括shell脚本名本身
详情请参考:shell预先定义的特殊变量


实测

当给出参数 / 时
在这里插入图片描述
当给出参数 home 时
在这里插入图片描述
当给出参数 . 时(. 即为当前目录)
在这里插入图片描述
当不给出参数时
在这里插入图片描述


本程序的作用

我们会发现不给参数时执行结果与给出参数 . 时执行结果一致,也就是说本程序的作用是:

没有给出参数时,寻找并显示当前目录中以d开头的字符串,即目录文件
给出参数时,寻找并显示给出的目录中以d开头的字符串,即目录文件


题目二

题目描述

分析程序的功能以及运行结果,在代码后添加注释。


代码实现

在这里插入图片描述


注释

参数小于2输出“you forgot the enter a filename”

退出并报错

以只读方式打开参数1,其权限为0644,并将返回值赋值给fd1

创建一个文件在参数2,其权限为0644,并将返回值赋值给fd2

从fd1中读取字节数为512的内容到buf缓冲区,并将返回值赋值给n

将buf中字节数为n的内容写到fd2中,直到n不大于0

关闭fd1,fd2


关于argc、argv

argc表示参数数量,argv则是保存参数的数组,argv[0] 指向程序运行的全路径名,argv[1]是第一个参数,argv[2]是第二个参数,以此类推……


关于read函数

在这里插入图片描述
在这里插入图片描述


关于文件描述符

很多函数都会用到这个东西,这个东西其实就跟我们的学号一样,是为了方便引用某文件而存在的,其类型一般为int,比如一个文件叫test,碰巧还有一个文件叫test,于是我们在引用他们时如果“叫”他们的名字往往容易两个一起“回应”你,所以我们将他们分别描述为01、02,那么在需要引用他们的时候就方便多了。


关于write函数

在这里插入图片描述
在这里插入图片描述


本程序的作用

将fd1中的内容全部复制到fd2中


题目三

题目描述

编写一个shell脚本,检查给定的用户是否登陆系统。


代码实现

read -p "请输入用户名:" user
if who|grep -qw $user
thenecho $user login
elseecho $user not login
fi

实测

在这里插入图片描述
在这里插入图片描述


关于grep命令

本题中用到了grep命令的参数:-q,-w

grep -w :只匹配整个单词,而不是包含一部分单词的字符串

(如grep -w cmy 目标文件 ,只会匹配‘cmy’,而不匹配‘cmypangle’这种包含cmy的字符串)

grep -q : Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected.
中文意思为,安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。

不带-q是这样的:

在这里插入图片描述
不带-w是这样的
在这里插入图片描述


关于read命令

本题中用到了read命令的参数: -p

read -p :用于给出提示符,p是prompt的缩写,即由这个开关项给出提示信息。

例如,本题中,回车后屏幕会显示:

请输入用户名:

该语句之后输入的内容就会被保存到use变量中了


题目四

题目描述

编写一个shell脚本,判断文件是不是字符设备文件,如果是,将其拷贝到 /dev 目录下。


代码实现

if [[ -c $1 ]]
thencp $1 /dev
elseecho "This file is not a character device file!"
fi

关于test命令

为了方便就直接用老师的PPT截图了

在这里插入图片描述
在这里插入图片描述
至于cp命令……emm就是很常规的用法,这里就不说了~


实测

在这里插入图片描述
字符设备咱也不知道咋搞,就不搞复制的情况了~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础的shell编程问题(二)

文章目录题目一题目描述代码实现结果验证关于本题题目二题目描述代码实现结果测试题目三题目描述代码实现及结果测试题目四题目描述代码实现及结果测试题目五题目描述代码实现及结果测试题目一 题目描述 输入的命令行参数必须是hello,才会正确显示;否则…

Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】

文章目录题目描述代码实现关于本题涉及到的几个函数randint()where()cumsum()题目拓展题目描述代码实现题目拓展题目描述代码实现argmax()题目描述 从前有一个酒鬼,喝醉了行走在一条直线上,每走一步方向是不确定的(向前或者向后)…

搞清axis的含义,这一篇就够了!

文章目录axis的含义旁门左道式理解二维数组中的axis三维数组中的axis正规理解axis的含义 在自己分析之前先摆上官方关于多维数组中axis的值的定义: axis 0,表示第一个维度 axis 1,表示第二个维度 axis -1,表示最后一个维度…

Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

Struts2.3.5Hibernate3Spring3.1基于注解实现的的多文件上传,下载,这里是上传文件到数据库中,上传控件可以增加和删除,有需要的朋友可以看看。 以下是源码下载地址:http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

【精品计划1】动态规划入门到熟悉,看不懂来打我啊

持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)0,F(1)1, F(n)F(n-1)…

【大总结2】大学两年,写了这篇几十万字的干货总结

本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、NOSQL、网络/前端/项目基础知识、安全和测试、框架的学习、中间件和工具、设计模式和框架原理、我推荐的资料、我的建议 本篇文章应该算是Java后端开发技术栈的,但是大部分是基础…

《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

我摊牌了,这篇文章,值得99%的人收藏 此文后续会改为粉丝可见,所以喜欢的请提前关注和收藏,不迷路。 最近有五本我喜欢的redis实体新书,想要的去评论,我写个随机数抽奖包邮送给你。 那么,准备好…

Python数据预处理之异常值的处理——【自定义的three_sigma()函数、boxplot()方法】

文章目录基于3σ原则检测异常值代码实现测试基于箱型图检测异常值异常值的处理基于3σ原则检测异常值 3σ原则,又称拉依达准则。是指假设一组检测数据只含有随机误差。对其进行计算处理得到标准偏差,按一定概率确定一个区间,凡是超过这个区间…

那个谷歌的网红扔鸡蛋的题,来看看教科书式的回答

leetcode顶级难题,谷歌面试天天问,来看看吧,带你来一步一步达到最优解。 谷歌不知道问了多少遍,蓝桥杯也出现过,leetcode上是顶级难题,到底是什么题能如此频繁地出现?我们一探究竟吧。 原题描述…

不骗你,没读这一篇,你不可能懂二分

上篇文章讲动态规划获得了80k浏览,这次的二分也值得你们一看,这个系列是特别用心写的,准备出书的哦 动态规划 3.0 引子 图书馆自习的时候,一女生背着一堆书进阅览室,结果警报响了,大妈让女生看是哪本书把警报弄响了,女生把书倒出…

超硬核!操作系统学霸笔记,考试复习面试全靠它

之后会发布基于基础知识的大部分算法的模拟代码合集,敬请关注。 进程基础 进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封…

超硬核!学霸把操作系统经典算法给敲完了!要知行合一

上期的笔记,浏览快1万了,既然关注的人很多,那就发出来承诺过的算法全模拟,希望帮到你们。 上期的操作系统学霸笔记,考试复习面试全靠它 一、模拟进程调度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

超硬核!数据结构学霸笔记,考试面试吹牛就靠它

上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。 超硬核!操作系统学霸笔记,考试复习面试全靠它 第一次笔记(复习c,课程概述&#xff…

超硬核!小白读了这篇文章,就能在算法圈混了

作为一只超级硬核的兔子,从来不给你说废话,只有最有用的干货!这些神级算法送给你 目录 第一节 1.1bogo排序 1.2位运算 1.3打擂台 1.4morris遍历 第二节 2.1睡眠排序 2.2会死的兔子 2.3矩阵快速幂 2.4摔手机/摔鸡蛋 时空复杂度目录 …

超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的

本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧? 当然如果落下什么了欢迎大家评论指出 目录 顺序存储线性表实现 单链表不带头标准c语言实现 单链表不带头压缩c语言实现 约瑟…

Matplotlib——绘制图表

文章目录通过figure()函数创建画布通过subplot()函数创建单个子图通过subplots()函数创建多个子图通过add_subplot()方法添加和选中子图添加各类标签绘制常见图表绘制直方图——hist()函数绘制散点图——scatter()函数绘制柱状图——bar()函数设定线条的相关参数本地保存图片通…

Seaborn——绘制统计图形

文章目录可视化数据的分布绘制单变量分布绘制双变量分布绘制成对的双变量分布用分类数据绘图类别散点图通过stripplot()函数画散点图swarmplot()函数类别内的数据分布绘制箱型图绘制提琴图类别内的统计估计绘制条形图绘制点图可视化数据的分布 绘制单变量分布 一般采用最简单…

Bokeh——交互式可视化库

文章目录前言如何通过Plotting绘制图形前言 Bokeh是一个专门针对Web浏览器使用的交互式可视化库,这是与其他可视化库相比最核心的区别。 如何通过Plotting绘制图形 Plotting是以构建视觉符号为核心的接口,可以结合各种视觉元素(例如&#x…

指针、引用以及const限定符、constexpr限定符

文章目录复合类型引用概念与使用引用的定义注意指针概念声明方式取地址符指针值空指针利用指针访问对象赋值和指针void* 指针指向指针的指针指向指针的引用初始化所有指针有多重含义的某些符号const限定符概念const的引用指针和const顶层const和底层constconstexpr和常量表达式…

关键字typedef、关键字using、auto类型说明符和declytpe类型指示符

文章目录类型别名概念关键字 typedef别名声明 (alias declaration) using指针、常量和类型别名类型别名简化多维数组指针auto类型说明符概念复合类型、常量和autodecltype类型指示符概念decltype和引用类型别名 概念 有两种方法可用于定义类型别名。 关键字 typedef typede…