shell编程实验-文件状态测试

这篇具有很好参考价值的文章主要介绍了shell编程实验-文件状态测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的:

熟悉UNIX的基本SHELL程序设计方法,包括:

(1)命令行参数检测;

(2)变量设置;

(3)文件状态检测与特定信息读取;

(4)程序运行控制。

二、实验原理:

(1)SHELL程序的主要用途

在SHELL程序中不仅仅可以使用命令的集合,而且可以安排自动化处理过程,因此可以通过编写SHELL程序使大量的任务执行实现自动化。SHELL比较擅长完成系统管理任务,尤其适合完成那些易用性、可维护性和便携性比执行效率更优先的任务。我们可以使用任意一种文本编辑器完成SHELL程序的编写,在SHELL编程中要遵循一定的程序设计规则和变量使用规则。

(2)SHELL程序的执行与调试

在bash的SHELL程序设计中,程序必须以下面的行开始:

#!/bin/bash

这里符号#!用来告诉系统,后面给出的参数是用来执行该文件的程序。

利用vi,gedit等文本编辑器编写Shell脚本的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

filename.sh,文件名后缀sh表明这是一个Bash脚本文件

当编辑完一个SHELL脚本后,要使该脚本能够执行,还必须使该脚本文件具有可执行权。需要执行命令:

chmod  +x  filename

在shell程序中,以#开头到一个行结束的句子表示注释信息。建议大家在编写shell程序时养成添加注释的习惯,因为注释不仅能给其他需要熟悉该程序的人以帮助,也能给出脚本编写者设计原理的提示。

进行shell程序设计时,必定会用到变量。Shell编程中使用的变量有自己的特色,即所有的变量都是由字符串组成的,而且对变量无须进行声明,可直接进行变量赋值操作。

(3)SHELL程序注意事项

SHELL编程中除了需要遵守一些规则外,还有一些注意事项,如果做得好会对编程有促进,这里列出几条仅供大家参考,更多的内容还需自己通过编程积累。

因为LINUX中命令使用的是小写字符,因此在SHELL编程中可以使用大写字符表示变量以示区别。

在SHELL语句中加入必要的注释,以便以后阅读和维护,注释以”#”开头。

对SHELL变量进行数字运算时,使用乘法符号”*”时,要用转义符”\”进行转义。例子:multiplication=` expr $j \* $j`

由于SHELL对命令中多余的空格不进行任何处理,因此程序员可以利用这一特性调整程序缩进格式,达到增强程序可读性的效果。

在对函数命名时最好能使用有含义且容易理解的名字,即使函数名能够比较准确地表达函数所完成的任务。同时建议对于较大的程序要建立函数命名和变量命名对照表。

如果一行未完成,可以在行尾加上“这个符号 表明下一行与此行会合并为同一行。

(4)SHELL简单调试

最简单的调试命令当然是使用echo命令。可以使用echo在任何怀疑出错的地方打印任何变量值。另外还可以利用Bash中提供的选项进行检查

-n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。

-v,一边执行脚本,一边将执行过的脚本命令打印到标准输出。

-x,提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。该选项会显示刚刚执行的命令及参数。用户可以通过set命令打开-x选项或在启动Shell使用-x选项将Shell设置成跟踪模式。

使用这些选项有三种方法(注意:避免几种调试选项混用)

1.在命令行提供参数:$sh -x script.sh

2.脚本开头提供参数:#!/bin/sh -x

3.在脚本中用set命令启用or禁用参数:其中set -x表示启用,set +x表示禁用。

三、实验内容:

编写一个SHELL程序,动态检测指定文件的状态信息,当文件的大小发生改变时,给出提示信息,并继续前进检测。当文件的大小的变化次数或持续检查无变化次数达到一定值时,退出检查,程序结束,具体步骤如下:

(1)清屏;

(2)提示用户输入要检测其状态的文件名;

(3)显示该文件的状态信息(提示:该状态信息可由命令ls –l 来得到),或找不到该文件时的错误提示;

(4)用cut命令,或用sed或awk命令来截取状态信息中文件的大小并保存;

(5)每隔5秒钟检测一次该文件大小的信息,并与保存的文件原来的大小相比较;

(6)如果文件大小未改变,则屏幕显示不变,并继续每隔5秒钟检测一次;

(7)如果文件大小已改变,则保存新的文件大小,并在屏幕上显示:

file [ filename ] size changed(括号中的filename为本程序运行时用户输入的被检测的文件名)。程序继续每隔5秒钟检测一次文件的大小;

(8)程序循环执行5~7步的操作。当被检测的文件或者已累计改变了两次大小,或者已连续被检测了十次还未改变大小时,给出相应提示,然后清屏退出。

参考代码如下:文章来源地址https://www.toymoban.com/news/detail-500183.html

#!/bin/bash

clear

# 提示用户输入要检测的文件名
echo "Please enter the filename to monitor:"
read filename

# 检查文件是否存在,如果存在,显示状态信息;否则,提示错误信息
if [ -e $filename ]
then
    ls -l $filename
    oldsize=$(ls -l $filename | awk '{print $5}')
else
    echo "File not found: $filename"
    exit
fi

# 初始化计数器
count1=0
count2=0

# 循环检测文件大小
while true
do
    # 暂停5秒钟
    sleep 5

    # 检查文件是否存在
    if [ ! -e $filename ]
    then
        echo "File not found: $filename"
        break
    fi

    # 获取文件当前的大小
    newsize=$(ls -l $filename | awk '{print $5}')

    # 如果文件大小未改变,则继续循环
    if [ $newsize -eq $oldsize ]
    then
        echo "test file's status ..."
        count2=$((count2+1))
    else
        # 如果文件大小已改变,则更新文件大小,打印提示信息,并继续循环
        oldsize=$newsize
        echo "file [ $filename ] size changed"
        count1=$((count1+1))
    fi

    # 更新标志位
    if [ $count1 -ge 2 ]
    then
        echo "File size changed twice"
        break
    fi

    if [ $count2 -ge 10 ]
    then
        echo "File size unchanged for 10 times"
        break
    fi
done
#检测文件结束
echo "Monitoring finished"
sleep 5
# 清屏并退出程序
clear

到了这里,关于shell编程实验-文件状态测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell编程之存储读写测试实战脚本

    Shell编程是一种在命令行环境中编写程序的技术,常用于Linux和Unix系统。它主要使用Shell脚本语言来编写程序。Shell编程常用于系统管理、自动化任务、批处理等领域。 常用的Shell脚本语言包括Bash、Csh、Tcsh和Zsh等。Bash是最常用的Shell编程语言,它是大多数Linux和Unix系统的默认

    2024年02月12日
    浏览(33)
  • Shell脚本编程实践——第3关:使用Shell脚本创建文件目录

    任务描述 本关任务:设计一个Shell程序,在/home目录下建立一个userdata目录,在userdata目录下再建立5个目录,即user1~user5,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 相关知识 为了完成

    2023年04月22日
    浏览(32)
  • 学习编程的目的

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一名广东专升本的学生,目前正在努力学习计算机相关知识,以前有学过一段时间的C语言,总是听别人说C很难很难让我也对这门编程语言充满了畏惧,直到升本的时候需要考C然后认真的去学习之后,发

    2024年02月08日
    浏览(21)
  • 一文读懂火山引擎A/B测试的实验类型(1)——编程实验

    编程实验:指的是通过代码编程进行AB实验,广泛使用于前端优化、策略优化和后端算法优化多种实验场景,包含客户端和服务端实验。 前置条件 :接入客户端SDK或者服务端SDK,详见:应用接入 如何选择实验类型?适用场景是什么? 服务端实验 :指通过服务端获取实验分组

    2024年02月09日
    浏览(43)
  • Python编程实验五:文件的读写操作

    目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 四、实验结果分析与体会 (1)通过本次实验,学生应掌握与文件打开、关闭相关的函数,以及与读写操作相关的常用方法的使用; (2)理解基于文件的词频统计以及数据分析的基本思路

    2024年03月14日
    浏览(37)
  • 软件进行压力测试的主要目的

    软件进行压力测试是指通过模拟大量用户访问和负载压力,在正常和峰值使用情况下对软件系统进行测试的过程。软件进行压力测试的主要目的是确保软件在实际应用中能够稳定、可靠地运行,满足用户的需求。   首先,软件进行压力测试的主要目的是评估系统的性能和稳定

    2024年02月16日
    浏览(38)
  • 【芯片设计封装与测试】芯片测试目的、方法、分类及案例

    目录 1.芯片测试概述(目的、方法) 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关的各种名词 4.晶圆、单颗die和封

    2024年02月11日
    浏览(41)
  • 实验5 MapReduce初级编程实践(1)——编程实现文件合并和去重操作

    通过实验掌握基本的MapReduce编程方法; 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,

    2023年04月15日
    浏览(39)
  • 进行性能压力测试的原因、目的和好处

    性能压力测试是指在模拟高负载、高并发情况下对软件系统进行测试,以衡量系统在实际使用过程中的性能表现。这些测试可以为生产环境中的应用程序提供关键数据,并帮助开发人员从根本上了解系统的实际性能。在本文中,我们将探讨进行性能压力测试的原因、目的和好

    2024年02月10日
    浏览(68)
  • Linux Shell 脚本编程学习之【第2章 Linux文件系统和文本编辑器(第一部分)】

    1、root用户 系统唯一,是真实的。该用户既可以登录系统,可 以操作系统任何文件和命令,拥有最高权限。 2、虚拟用户 这类用户也被称为伪用户或假用户,与真实用户区分开来,这类用户不 具有登录系统的能力,但却是系统运行不可缺少的用户,比如 bin、daemon、adm、 ft

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包