博客
关于我
基础的shell编程问题(一)
阅读量:263 次
发布时间:2019-03-01

本文共 1867 字,大约阅读时间需要 6 分钟。

文章目录


题目一

题目描述

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


代码实现

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

关于$#的有关内容

$# 表示命令行上参数的个数,但不包括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 "请输入用户名:" userif who|grep -qw $userthen        echo $user loginelse        echo $user not loginfi

实测

在这里插入图片描述

在这里插入图片描述


关于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 ]]then        cp $1 /develse        echo "This file is not a character device file!"fi

关于test命令

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

在这里插入图片描述

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


实测

在这里插入图片描述

字符设备咱也不知道咋搞,就不搞复制的情况了~

转载地址:http://yupt.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>