博客
关于我
基础的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/

你可能感兴趣的文章
mysql
查看>>
MTK Android 如何获取系统权限
查看>>
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql -存储过程
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>