实验三:shell编程(1)
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)相关推荐
- ZUCC_大数据计算技术_实验三 HDFS编程实践
实验三 HDFS编程实践 课程名称 大数据计算技术 实验项目名称 实验三 HDFS编程实践 启动hadoop 一.利用Shell命令与HDFS进行交互 1. 目录操作 新建家目录 可以看到新建目录内无 ...
- linux 程序实验总结,Linux实验报告(实验四) shell编程实验
实验四 shell编程实验(二) 班级:姓名:学号:上机时间:年月日 任课教师:实验教师:实验成绩: 一.实验目的 综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程. 二.实验注意 ...
- linux实验三shell程序设计,实验三 LINUX SHELL编程
精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...
- 计算机脚本程序编写,实验三-shell脚本程序设计.docx
实验报告 课程名称 Linux 系统实践 实验项目LINUX SHELL脚本程序设计 实验仪器PC 系别计算机学院 专业网络工程 班级 / 学号 网 1702/2017011463 学生姓名孟启贤 实 ...
- 实验四 Shell编程
一.实验目的 1.掌握shell环境变量.管道.输入输出重定向使用方法: 2.掌握shell脚本建立和执行方法: 3.掌握shell脚本的基本结构: 4.掌握基本的shell编程方法. 二.实验环境: ...
- linux系统shell讲解实验报告,《操作系统》课程实验报告 SHELL编程.doc
华南理工大学 <操作系统 SHELL编程 姓名: 余柳红 学号: 201330571011 班级: 13信息安全班 合作者: 无 指导教师: 贺小箭 实验概述[实验目的及要求] 实验目的: 熟悉 ...
- 内农大《嵌入式基础》实验一 Shell编程
一. 实验目的 熟悉Shell脚本编程的基本方法: 掌握Shell脚本的变量和参数: 掌握Shell脚本的分支和循环控制流程. 二. 实验任务与要求 4. 根据实验内容编写Shell脚本程序: 5. ...
- 实验五 shell编程(Linux基础教程 第2版)
一.实验目的 1.了解shell的作用和主要分类. 2.掌握bash的建立和执行方式. 3.掌握bash的基本语法. 4.学会编写shell脚本. 二.实验硬.软件环境 装有Linux操作系统的计算机 ...
- 《嵌入式基础》实验三 ARM编程模型和ARM指令
零.前言 本人不擅长写汇编相关的东西,所以以下内容也是不断摸索(百度 ) 整出来的,和linux的实验报告的质量相比较低. 一. 实验目的 掌握ARM微处理器的汇编指令的使用方法. 掌握使用 LDM/ ...
- 南京邮电大学离散数学实验三:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格
实验原理及内容 说明:这部分内容主要包括: 1.形式化描述实验中所使用的数据结构和存储结构,给出函数之间的调用关系和数据传递方式: 2.给出核心算法的C++或Java等语言的源代码,并加上详细注释,分 ...
最新文章
- RIPv2相对于RIPv1来说主要有3方面的改进。下面的选项中,RIPv2的特点不包括【两个题】
- 发力大陆移动VR,HTC刚刚发布ViveWave开放平台和ViveFocus一体机
- Yii2中你可能忽略但很有用的两个方法batcheach
- 读写分离数据库之MyCat
- javascript 调用c#变量实例
- lisp xy轴不等比缩放_不就是用Python做个动态图吗?看招
- 原生 ajax查询,原生ajax啦啦啦
- 让机器有温度:带你了解文本情感分析的两种模型
- C语言 用传统流程图表示分段函数,C语言程序设计习题答案
- console连接h3c s5500_h3c console连接方法
- feign调用https接口_SpringBoot 2.0 开发案例之整合HTTP客户端Feign
- 计算机毕业设计springboot家政管理系统
- HTML <thead> 标签
- 在地化和本土化的区别_翻译和本地化有什么区别?
- 使用Camtasia来给视频或者图片调色
- 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档
- fread函数 和 feof函数
- CuteFTP、FlashFXP、FileZilla 基本应用比较
- Win10安装程序提示“不能打开要写入的文件xxxxx”如何解决
- signature=e7a4f21fa0bd38abc7e1a2451a8b7b26,Win10 14328起“迅雷7.9、迅雷极速版”崩溃修正补丁...
热门文章
- 解决织梦 \include\userlogin.class.php on line 21(或16) 报错的方法
- oracle sql plus 常用命令
- Android 动态权限申请 BaseActivity 封装 拨打电话
- 朴素贝叶斯(Naive Bayesian)
- 软件测试人员的核心竞争力
- Codeforces Round #445 div.2 D. Restoration of string 乱搞
- RabbitMQ配置文件
- UVA - 129 Krypton Factor (困难的串)(回溯法)
- 关于cocoa框架,你所要知道的一切(苹果官方文档,cocoa框架核心竞争力,必须收藏!)...
- 利用Linux命令行进行文本按行去重并按重复次数排序