实验目的
熟悉UNIX的基本SHELL程序设计方法,包括:
命令行参数检测
变量设置
文件状态检测与特定信息读取
程序运行控制
实验内容
编写一个SHELL程序,动态检测指定文件的状态信息,当文件的大小发生改变时,给出提示信息,并继续前进检测。
当文件的大小的变化次数或持续检查无变化次数达到一定值时,退出检查,程序结束。
实验内容:shell程序设计思路
(1)清屏;
(2)提示用户输入要检测其状态的文件名;
(3)显示该文件的状态信息(提示:该状态信息可由命令ls –l 来得到),或找不到该文件时的错误提示;
(4)用cut命令,或用sed或awk命令来截取状态信息中文件的大小并保存;
(5)每隔5秒钟检测一次该文件大小的信息,并与保存的文件原来的大小相比较;
(6)如果文件大小未改变,则屏幕显示不变,并继续每隔5秒钟检测一次;
(7)如果文件大小已改变,则保存新的文件大小,并在屏幕上显示:file [ filename ] size changed(括号中的filename为本程序运行时用户输入的被检测的文件名)。程序继续每隔5秒钟检测一次文件的大小;
(8)程序循环执行5~7步的操作。当被检测的文件或者已累计改变了两次大小,或者已连续被检测了十次还未改变大小时,给出相应提示,然后清屏退出。
实验内容:shell程序设计思路
(1)清屏;
clear
(2)提示用户输入要检测其状态的文件名;
echo “Input name:”
read fname
(3)显示该文件的状态信息(提示:该状态信息可由命令ls –l 来得到),或找不到该文件时的错误提示;
用 if test –f $fname # 这里也可以用:if [ -f $name],测试文件是否存在
then
fi
ls –l [ $fname]
linux中ls -l命令以长格式显示目录下的内容列表。
输出的信息从左到右依次包括文件名、文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
(4)用cut命令,或用sed或awk命令来截取状态信息中文件的大小并保存;
ls –l [ $fname] | cut –c 36-46 #管道:文件大小是在36列到46列
oldstat=` ` #注意是单撇号
(5)每隔5秒钟检测一次该文件大小的信息,并与保存的文件原来的大小相比较;
while [ xxx -ne. 2 ]
do
……
done
if [ “$oldstat”=“$newstat” ]
then
…….
fi
(6)如果文件大小未改变,则屏幕显示不变,并继续每隔5秒钟检测一次;
(7)如果文件大小已改变,则保存新的文件大小,并在屏幕上显示:file [ filename ] size changed(括号中的filename为本程序运行时用户输入的被检测的文件名)。程序继续每隔5秒钟检测一次文件的大小;
(8)程序循环执行5~7步的操作。当被检测的文件或者已累计改变了两次大小,或者已连续被检测了十次还未改变大小时,给出相应提示,然后清屏退出。
计数: test_count=`expr $test_count + 1`
change_count=`expr $change_count + 1`.
#注意,数学运算命令expr,两边用单撇号
参考代码
#
#detect file status
#
tput clear # clear screen
echo "Please input file name:"
read filename
filesize=`ls -l $filename | awk '{ print $5 }'`
echo $filesize
cursize=`ls -l $filename | awk '{ print $5}'`
echo $cursize
change=0
unchange=0
while [ "$change" -le 1 -a "$unchange" -le 9 ]
do
if [ "$filesize" == "$cursize" ]
then
unchange=`expr $unchange + 1`
echo "unchange=$unchange"
else
filesize=$cursize
change=`expr $change + 1`
echo "file $filename size changed"
fi
sleep 5
sync
cursize=`ls -l $filename | awk '{ print $5 }'`
done;
echo "finish"
exit 0
程序要求达到的运行效果
./test05.sh运行程序
1、程序运行时,如果找不到指定的文件,程序提示错误信息:
创建test.txt文件,输入123456
2、运行程序,输入要检查的文件名file1,在十次检查周期内,文件大小都一直不变的情况下,程序输出如下信息:
3、一旦当发现检查的文件大小改变时,程序显示如下信息:
监测过程中文件大小改变1次
后台修改文件内容
监测过程中文件大小改变2次