实验四 shell 编程
实验四shell 编程
一、实验目的
1、了解 shell的作用和主要分类。
2、掌握 shell环境变量、管道、输入输出重定向的使用方法。
3、掌握 shell脚本的建立和执行方式。
4、熟悉 shell脚本的基本结构。
5、掌握 shell脚本的调试方法。
二、实验内容
1、使用shell变量、位置参数和环境变量。
2、建立shell脚本并执行。
3、使用 shell一般控制结构编写脚本。
4、调试 shell脚本。
三、实验步骤
1、了解shell变量、位置参数和环境变量
1)输入以下命令,记录输出结果并分析。
#dir=/root
# echo$dir
# echodir
2)输入以下命令,记录输出结果并分析。
# read a b c www hnistcn
# echo "Web :$a.$b.$c"
2、建立简单Shell脚本文件
1)新建Shell脚本文件test_shell_0,编辑内容如下。
cd/var/log
cat /dev/null >messages #/var/log/message:几乎所有的开机系统发生的错误都会在此记录
cat /dev/null >wtmp #/var/log/wtmp:记录登录者讯录,二进制文件echo "Logs cleanedup."
2)采用多种方式运行test_shell_0脚本,记录输出结果并分析功能。
3、简单shell脚本文件改良
1)新建shell脚本test_shell_1,编辑内容如下。
#!/bin/bash
LOG_DIR=/var/logcd$LOG_DIR
cat /dev/null >messages
cat /dev/null > wtmpecho"Logscleanedup."exit
2)运行test_shell_1脚本,与test_shell_0对比,说明各行的作用。在第一行后加上注释,再运行脚本,记录结果并分析。
相关知识点
执行 shell 脚本有以下几种方式
- 相对路径方式,需先 cd到脚本路径下
代码如下:
[root@banking tmp]# cd/tmp[root@bankingtmp]#./ceshi.sh
脚本执行成功
2、绝对路径方式
代码如下:
[root@banking tmp]#/tmp/ceshi.sh
脚本执行成功
3、bash命令调用代码如下:
[root@banking /]# bash/tmp/ceshi.sh
脚本执行成功
4、.(空格)相对或绝对方式
代码如下:
[root@banking/]#./tmp/ceshi.sh
几种方式的区别
第一种和第二种没有什么区别,两种方式都需要提前赋予脚本以执行权限。
第三种是把脚本当做bash的调用来处理,所以,脚本不需要有执行权限就可以执行。
前三种方式都是在当前 shell 中打开一个子 shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第四种是使脚本内容在当前shell里执行,而不是单独开子shell执行。
开子shell与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。
而在当前shell中执行的话,则所有设置的环境变量都是直接生效可用的。
4、简单shell脚本文件优化
1)新建shell脚本test_shell_2,编辑内容如下。
#!/bin/bashLOG_DIR=/var/logROOT_UID=0LINES=50E_XCD=66E_NOTROOT=67
if["$UID"-ne"$ROOT_UID"]
then
echo "Must be root to run thisscript."
exit $E_NOTROOT
fi
if [ -n "$1" ] #测试是否有命令行参数(非空).
then
lines=$1
else
lines=$LINES# 如果不在命令行中指定,使用默认
fi
cd$LOG_DIR
if [ `pwd` != "$LOG_DIR" ]
then
echo "Can not change to $LOG_DIR."
exit $E_XCD
fi
tail -$lines messages > mesg.temp
mv mesg.temp messages
cat /dev/null > wtmp
echo "Logs cleaned up."
exit 0
2)运行test_shell_2脚本,与test_shell_1对比,说明其新增的功能。
四、应用实例
- 设计Script时,我们经常会利用sed置换系统配置文件里的关键词,以开启或关闭某个设置选项。如果想开启vsftpd的匿名登陆的功能该sed脚本如何设计?
提示:开启ftp工具vsftpd的匿名登陆功能只需要把其配置文件(/etc/vsftpd.conf)中anonymous_enable选项射程YES就可以了。
- 利用awk获取网卡的IP,网络设备名称以及系统内存大小
网卡的ip(试用各种方法但无结果)
网络设备名称
系统内存大小
- 修改CSV文件各字段的顺序:
以下是数据文件dataf.csv,想要把其第2个字段和第4个字段调换位置:
书名,主编,书号,出版社,定价(元),出版时间
大学生心理健康教育实用教程,邓彦,978-7-313-15714-0,北京大学,36.00,2016.8
大学生职业生涯规划,牛荣健,978-7-313-15538-2,上海交大,36.00 ,2016.8
创业管理与实务,蒋键,978-7-313-15633-4,浙江大学,36.00,2016.5
体育与健康,王峰,978-7-313-14769-1,上海交大,35.00,2016.5
创新创业与生涯发展实务指导,陈志国,978-7-313-15819-2,浙江大学,39.50,2016.6
概率论与数理统计(双色版),邓光明,978-7-313-17748-3,上海交大,34.00 ,2017.7
法律逻辑应用教程,吴诚,978-7-313-17952-4,北京大学,34.00,2017.4
五、思考题
- 编写一个shell脚本,它带一个命令行参数,这个参数是一个文件。如果这个文件是一个普通文件,则打印文件所有者的名字和最后的修改日期。如果程序带有多个参数,则输出出错信息。
- 编写一个bash脚本程序,用for循环实现将当前目录下的所有.c文件移到指定的目录下,最后在显示器上显示指定目录下的文件和目录。
- 编写一个名为dirname的脚本程序,它将参数作为一个路径名,并将该路径前缀(不包含最后部分的整个串)写到标准输出。
- 编写一个累加器脚本程序,用Fiboracci数列的前10个数做参数。
- 写一个shell脚本,包含两个数字数组array1和array2,分别初始化为{1,2,3,4,5}和{1,4,9,16,25}。脚本生成并显示一个数组,其中的元素是这两个数组中对应元素的和,数组中第一个元素是1+1=2,第2个元素是2+4=6等。
- 某工厂产管理员hnsd负责统计各车间每产产品数据计算机安装双硬盘保证数据安全该管理员每午12:00每午17:30必须数据进行双硬盘备份需要备份数据存放于/home/hnsd/workdata/目录备份数据别存放于/home/hnsd/disk1backup/(第块硬盘)/dev/disk2backup/(第二块硬盘)目录且文件名形式yyyymmdd_workdata1.tar.gz(午备份文件)yyyymmdd_workdata2.tar.gz(午备份文件)其yyyy、mm、dd别月
(1) 设计shell程序实现该任务
(2) 编写crontab文件实现述任务自调度
创建自己的帐户
注销并登录自己的帐户,创建备份文件
编写 autobackupdata1.sh命令
编写 autobackupdata2.sh命令
编写crontab文件实现对上述任务的自动调度crontab –e
切换到root账户,修改系统时间为上午11:59:50
【提示】获取格式yyyymmdd前期:
1)别获取月进行组合
yyyy=`date +%Y`
mm=`date +%m`
dd=`date +%d`
则$yyyy$mm$dd即文件名前期部
2)直接获取格式yyyymmdd前期
yyyymmdd=`date +%Y%m%d`
则$yyyymmdd即文件名前期部
六、心得体会
此实验为第四次实验,也是迄今为止难度大的实验,之前的那些都是基本操作,但是这节实验就涉及到了一些专业知识,如果不熟悉,进度就很慢,有些命令不熟悉,我就在书上找相关知识点,但是不齐全,再去找百度,才能勉强熟悉知道意思,但是学以致用对我来说还是有难度的,本实验最后一道题我不是很能理解,虽然网上也有例子,但是我尝试一下,有错误但是不知道错在哪,可能是因为没有真正的理解所以才不会学以致用。
实验四 shell 编程相关推荐
- linux 程序实验总结,Linux实验报告(实验四) shell编程实验
实验四 shell编程实验(二) 班级:姓名:学号:上机时间:年月日 任课教师:实验教师:实验成绩: 一.实验目的 综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程. 二.实验注意 ...
- 实验四 Shell编程
一.实验目的 1.掌握shell环境变量.管道.输入输出重定向使用方法: 2.掌握shell脚本建立和执行方法: 3.掌握shell脚本的基本结构: 4.掌握基本的shell编程方法. 二.实验环境: ...
- linux分支结构,实验四 Shell脚本中的分支结构
实验四 Shell脚本中的分支结构 #实验内容: ###一.if分支结构 •if结构是最基本的分支结构类型. •使用if结构时,只有满足某个条件才会执行某些语句,而在不满足此条件的情况下执行其他语句. ...
- MOOS-ivp 实验四 MOOS编程入门(2)MOOS类讲解
MOOS-ivp 实验四 MOOS编程入门(2)MOOSapp类讲解 文章目录 MOOS-ivp 实验四 MOOS编程入门(2)MOOSapp类讲解 前言 一.MOOSapp父类的结构和方法 1.使用 ...
- MOOS-ivp 实验四 MOOS编程入门(1)
MOOS-ivp 实验四 MOOS编程入门(1) 文章目录 MOOS-ivp 实验四 MOOS编程入门(1) 前言 一.MOOS概览 1.MOSS应用程序结构 2.定义在MOOSmsg上的便携函数(h ...
- 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操作系统的计算机 ...
- Shell 编程进阶笔记
这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...
- linux shell 文件空,linux shell编程 如何判断一个文件是否为空
shell 判断文件/目录是否为空 jfkidear144932015-01-15 shell中如何判断一个变量是否为空 l_nan365492014-07-14 在shell中如何判断一个变量是否为 ...
最新文章
- Intellij IDEA单元测试提示Test events were not received
- 理解class.forName()
- Vector反向迭代器使用
- spring中bean的作用域属性single与prototype的区别
- 【招聘(广州)】 招聘.NET程序员
- 【时间序列】简单garch+arma模型,金融时间序列
- python的内置函数 剖析
- Js时间相关处理函数
- SQL Server数据库备份工具
- 4、智慧变电站 - 外围电塔及电线绘制
- python extractor_Python extractor
- 第三方平台可以通过微信公众平台素材管理接口实现同步了
- DIY树莓派Raspberry Pi
- 设置 CSDN 皮肤的方法,修改成自己喜欢的皮肤
- 基于“机器学习”的智能聊天机器人---python实现(1)
- 招标流程及注意事项_资讯详情
- SendMessage实现进程间通信
- MAC 安装及配置maven
- 【STC15】定时器2模式0作为波特率发生器示例程序
- Redis实战:第五章-使用Redis构建支持程序
热门文章
- 数据分析 回归问题:北京PM2.5浓度回归分析训练赛
- Nginx和HA负载
- OpenCV-Python教程
- 单细胞测序流程(二)数据整理
- DNK基础之静态库、动态库、编译流程
- 蒟蒻的数据结构乱谈(未完)
- 如何获取b站、YouTube等网站的视频封面
- 2016年江苏省普通高等学校第十三届高等数学竞赛试题(本科一级)讲解
- 基于android终端的物联网医药物流管理系统设计公司,基于Android终端的物联网物流管理系统的设计与实现.pdf...
- springboot2.0之配置spring security记住我(rememberMe功能)不起作用的原因