1.练习shell中的命令历史、别名、特殊字符用法

命令历史:

使用history命令显示命令历史表中的命令。

(1)history后不带任何参数,会显示历史命令清单(包含刚刚输入的history命令)

(2)如果history后面给出一个正整数,例如:history 3,只显示最后的3行。

(3)如果history后给出一个文件,例如:history t1,则把a1作为历史文件名

命令使用失败.....

历史命令调用:

!!:重复上一条命令

!n:重新执行第n条历史命令

!-n:重新执行倒数第n条历史命令。如!-1就等于!!

!string:重新执行以字符串string开头的最近的历史命令行。例如,!ca表示访问前面最近的cat命令

!?string?:重新执行最近的、其中包含字符串string的那条历史命令。例如,!?hist?表示重复前面的含有hist的命令

!#:到现在为止所输入的整个命令行

例如:!7 先显示序号为7的命令,然后执行此命令。

别名:

定义别名:alias [name[=value]]

取消别名:unalias name

例如:

特殊字符用法:

一般通配符:* ?[ ] ! ^

示例如下:

引号:

倒引号:调用倒引号内的命令

单引号:显示单引号内的内容

双引号:显示双引号内的内容

单引号内包含倒引号:原封不动的显示

双引号内包含倒引号:调用倒引号内的命令

2.shell命令应用练习

(1)通过帮助信息查看,简述以下文件的用途:

/etc/passwd 是用户账户信息文件,包含使用冒号(:)分隔的七个字段

/etc/shadow 是可选的加密后的密码文件,包含系统账户的密码信息和可选的年龄信息,此文件包含9个字段,用半角冒号分隔,如果没有为好好密码安全,此文件绝对不能让普通用户可读

/etc/group 文件保存了系统中所有组的名称,以及每个组中的成员列表。文件中每一行表示一个组,由三个冒号分隔开的字段组成。

/etc/gshadow 文件包含影子化了的组账户信息

(2)依次输入如下命令,观察运行结果。结合man id查看到的帮助信息,指出每一条命令功能。

id :打印用户组、UID以及该用户所属的所有组

id -u :打印有效的用户id

id -u root :打印拥有root权限的用户id

id -u huxingheng :打印用户名为huxingheng的用户id

(3)在shell命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功能。

<1>

which python :在path变量指定的路径中搜索python命令的位置,并返回第一个搜索结果。

whereis python:whereis命令用于程序名搜索,且只能搜索二进制文件、man说明文件、源代码文件。如果省略参数,则返回所有信息。

locate python:locate命令可以在搜索数据库时快速找到档案,它的功能和find类似,但find是通过硬盘查找,速度慢且浪费资源,而locate则是通过数据库查找索引,速度较快。

find /usr/bin -name python:通过硬盘查找方式在/usr/bin文件夹下搜索python

<2> 

sudo apt install gimp:

首先,解释下什么是gimp。gimp是GNU图像处理程序(GNU Image Manipulation Program)的缩写,号称是linux下的Photoshop。

此命令是用来安装gimp程序的

which gimp:显示gimp所在目录

sudo apt remove gimp:卸载gimp程序

which gimp:显示gimp所在目录(已删除,所以显示为空)

<4> 

对比总结:通过下面的截图对比可以看出,真的不一样了!好吧,我没看明白,但确实不一样了,好像是后面的内容被剪掉了,数了下,貌似是以空格为界定,然后8个。。。猜测猜测,纯属猜测。

补:明白了,自定义分隔符为空格 (d与f联用)指定显示第1个和第8个区域。

ls -dl /root --time-style=long-iso  (说实话,我没搞懂它的用处)

ls -dl /root --time-style=long-iso|cut -d' ' -f1,8

<5> 

对比总结:很明显,第二条命令在查看时对文件按时间排了序(时间从后往前),第三条命令在查看时同样对文件按时间排了序,只是它的顺序是从前往后。

ls -l --time-style=long-iso

ls -l --time-style=long-iso -t

ls -l --time-style=long-iso -t -r

<6> 

ls /usr/share/man

查看/usr/share/man目录下的文件和文件夹

ls /usr/share/man | grep man[1-8]

功能:在/usr/share/man 目录下查找与字串“man1”、“man2”......“man8”匹配的文件或文件夹

ls /usr/share/man/man1

功能:查看/usr/share/man/man1目录下的文件或文件夹

file /usr/share/man/man1/ls.1.gz

功能:ls.1.gz展现文件的详细类型信息

mkdir ~/temp; cp /usr/share/man/man1/ls.1.gz ~/temp

功能:从 /usr/share/man/man1目录下复制文件 ls.1.gz 到新创建的文件夹 temp 中

sudo gzip -d ls.1.gz; ls

功能:安装 ls.1.gz

<7>

ls -l /home | grep "^d" | wc -l

功能:查看/home目录,匹配出开头是d的....然后统计数目并显示在屏幕上。

<8>

sudo adduser user7

功能:添加新用户

ls /home | tee users | wc -l

功能:在/home目录下查看并统计用户的数目,并将用户数显示到屏幕上。

(4)根据要求写出相应的shell命令。

在目录 /usr/include 目录下搜索文件signal.h是否存在

 在/usr/include目录下的所有文件中查找包含BUFSIZ的行,并显示所在行号。(要求过滤掉错误信息)

在用户名密码文件/etc/passwd中查找登录shell为bash的用户信息记录,并显示行号。

从/etc/group文件中截取第一列和第三列,并按照组id的数值大小从小到大排列

由于/etc/group文件是以冒号为分隔符,so......看图!

体验awk,sed的用法:依次执行命令,观察执行结果。

cp /etc/apt/sources.list t1; less t1

sed -e "s/#.*//g"   t1

sed -e "s/#.*//g"   t1 | awk '{if(length != 0) print $0}'

tail -5 /etc/passwd | awk -F: '{print $1}'

tail -5 /etc/group | tee t2

awk 'BEGIN {print "file t2"} {print "line" NR ":" $0} END {print "over"}' t2

总结:

sources.list:linux中的源配置文件,存放的是ubuntu软件更新的源服务器地址,该文件可编辑。

sed:号称在线编辑器,一次只处理一行的内容,处理时,将当前处理的行存储在临时缓冲区,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,不断重复,直至处理到文末。文件内容并未改变,除非用了重定向。

awk:awk是一种强大的文本分析工具,它在对数据分析并生成报告时显得尤为强大,简单说,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

查阅网络和帮助,体验命令curl和wget方法。

curl:听说是很强大的http命令行工具。

wget:传说是下载文件的工具,都linux用户必不可少。

(注:emmm,好吧,其实这里我不太会,连sed、awk、curl、wget是什么都不清楚,印象中好像老师有提到过,但很模糊,所以它们的用法.....后期再完善吧,太困了,睡觉了。)

编写一个shell脚本,使用四种方式分别执行。

练习(1)

使用vim编辑器编写一个脚本ex1.sh,步骤请看截图:

执行该脚本:

该脚本实现的功能是:备份当前目录下最近1天以内被修改过的普通文件以backup系统当前日期时间为文件名,并压缩存档。备份过程中错误信息写入error_info,然后分别查看备份文档和报错信息。尝试着执行了一下,第一种和第四种方式成功执行,第二种方式没有看明白什么意思,第三种方式执行失败了。

练习(2)

用vim编辑器编写脚本ex2.sh,步骤请看截图:

执行该脚本:

line 3 中 read 命令选项-n11 功能:

使用-n选项可以设置read命令记录指定个数的输入字符,当输入字符达到指定数目时,自动退出,并将输入的数据赋值给变量。

在此题中,-n11的功能是指读入的数据指定为11个字符,超过11个字符将自动退出。

line 14 的功能:

在文件名与变量filename中存放内容相同的文件中查找与变量code中存放的字串匹配的行,并存到t1中,然后从t1中读取信息,放到变量major中。

总结:这次实验的内容好“丰富”噢,做了好长好长时间啊,主要是有好多东西都不会,全程在百度命令的用法,去查书或查ppt的话感觉效率有点低,要翻老半天才能找到那条命令在哪,估计是我书翻的少了,对内容太不熟悉了。然后上次实验提了一下关于上课的反馈,随后老师就改变了上课方式,新的方式感觉很好,先听懂了再自己去敲命令要比跟着老师一起敲要好的多,起码不会显得手忙脚乱,对命令理解的也要好的多。emmm,暂时就这样吧,先睡觉了。

——END——

转载于:https://www.cnblogs.com/hxh77/p/8955164.html

实验三:shell编程(1)相关推荐

  1. ZUCC_大数据计算技术_实验三 HDFS编程实践

    实验三 HDFS编程实践 课程名称 大数据计算技术 实验项目名称 实验三 HDFS编程实践 启动hadoop 一.利用Shell命令与HDFS进行交互 1. 目录操作 新建家目录 可以看到新建目录内无 ...

  2. linux 程序实验总结,Linux实验报告(实验四) shell编程实验

    实验四 shell编程实验(二) 班级:姓名:学号:上机时间:年月日 任课教师:实验教师:实验成绩: 一.实验目的 综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程. 二.实验注意 ...

  3. linux实验三shell程序设计,实验三 LINUX SHELL编程

    精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...

  4. 计算机脚本程序编写,实验三-shell脚本程序设计.docx

    实验报告 课程名称 Linux 系统实践 实验项目LINUX SHELL脚本程序设计 实验仪器PC 系别计算机学院 专业网络工程 班级 / 学号 网 1702/2017011463 学生姓名孟启贤 实 ...

  5. 实验四 Shell编程

    一.实验目的 1.掌握shell环境变量.管道.输入输出重定向使用方法: 2.掌握shell脚本建立和执行方法: 3.掌握shell脚本的基本结构: 4.掌握基本的shell编程方法. 二.实验环境: ...

  6. linux系统shell讲解实验报告,《操作系统》课程实验报告 SHELL编程.doc

    华南理工大学 <操作系统 SHELL编程 姓名: 余柳红 学号: 201330571011 班级: 13信息安全班 合作者: 无 指导教师: 贺小箭 实验概述[实验目的及要求] 实验目的: 熟悉 ...

  7. 内农大《嵌入式基础》实验一 Shell编程

    一. 实验目的 熟悉Shell脚本编程的基本方法: 掌握Shell脚本的变量和参数: 掌握Shell脚本的分支和循环控制流程. 二. 实验任务与要求 4. 根据实验内容编写Shell脚本程序: 5. ...

  8. 实验五 shell编程(Linux基础教程 第2版)

    一.实验目的 1.了解shell的作用和主要分类. 2.掌握bash的建立和执行方式. 3.掌握bash的基本语法. 4.学会编写shell脚本. 二.实验硬.软件环境 装有Linux操作系统的计算机 ...

  9. 《嵌入式基础》实验三 ARM编程模型和ARM指令

    零.前言 本人不擅长写汇编相关的东西,所以以下内容也是不断摸索(百度 ) 整出来的,和linux的实验报告的质量相比较低. 一. 实验目的 掌握ARM微处理器的汇编指令的使用方法. 掌握使用 LDM/ ...

  10. 南京邮电大学离散数学实验三:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格

    实验原理及内容 说明:这部分内容主要包括: 1.形式化描述实验中所使用的数据结构和存储结构,给出函数之间的调用关系和数据传递方式: 2.给出核心算法的C++或Java等语言的源代码,并加上详细注释,分 ...

最新文章

  1. RIPv2相对于RIPv1来说主要有3方面的改进。下面的选项中,RIPv2的特点不包括【两个题】
  2. 发力大陆移动VR,HTC刚刚发布ViveWave开放平台和ViveFocus一体机
  3. Yii2中你可能忽略但很有用的两个方法batcheach
  4. 读写分离数据库之MyCat
  5. javascript 调用c#变量实例
  6. lisp xy轴不等比缩放_不就是用Python做个动态图吗?看招
  7. 原生 ajax查询,原生ajax啦啦啦
  8. 让机器有温度:带你了解文本情感分析的两种模型
  9. C语言 用传统流程图表示分段函数,C语言程序设计习题答案
  10. console连接h3c s5500_h3c console连接方法
  11. feign调用https接口_SpringBoot 2.0 开发案例之整合HTTP客户端Feign
  12. 计算机毕业设计springboot家政管理系统
  13. HTML <thead> 标签
  14. 在地化和本土化的区别_翻译和本地化有什么区别?
  15. 使用Camtasia来给视频或者图片调色
  16. 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档
  17. fread函数 和 feof函数
  18. CuteFTP、FlashFXP、FileZilla 基本应用比较
  19. Win10安装程序提示“不能打开要写入的文件xxxxx”如何解决
  20. signature=e7a4f21fa0bd38abc7e1a2451a8b7b26,Win10 14328起“迅雷7.9、迅雷极速版”崩溃修正补丁...

热门文章

  1. 解决织梦 \include\userlogin.class.php on line 21(或16) 报错的方法
  2. oracle sql plus 常用命令
  3. Android 动态权限申请 BaseActivity 封装 拨打电话
  4. 朴素贝叶斯(Naive Bayesian)
  5. 软件测试人员的核心竞争力
  6. Codeforces Round #445 div.2 D. Restoration of string 乱搞
  7. RabbitMQ配置文件
  8. UVA - 129 Krypton Factor (困难的串)(回溯法)
  9. 关于cocoa框架,你所要知道的一切(苹果官方文档,cocoa框架核心竞争力,必须收藏!)...
  10. 利用Linux命令行进行文本按行去重并按重复次数排序