shell
文件状态检测shell
-
编写一个SHELL程序,动态检测指定文件的状态信息,当文件的大小发生改变时,给出提示信息,并继续前进检测。当文件的大小的变化次数或持续检查无变化次数达到一定值时,退出检查,程序结束。
-
实现代码:
!/bin/bash
用于检测文件状态信息,文件变化给出状态信息。由用户给出检查次数上限值。
程序名:filetest
ls -l > filelog;
awk ' /file1/ {print $5}' filelog awk命令。
tput clear
echo -n "use like : filetest filename [loop]:"
read -r var1 var2 var3
if [ -z "${var1}" ] || [ -z "${var2}" ]
then
while [ -z "${var1}" ] || [ -z "${var2}" ]
do
echo -n "use like: filetest filename [loop]:"
read -r var1 var2 var3
done
else
while [ "${var1}" != filetest ]
do
echo -n "use like: filetest filename [loop]:"
read -r var1 var2 var3
done
if [ -z "${var3}" ]
then
loop=10 #默认值为10次
else
loop="${var3}"
fi
fi
ls -l "${var2}" > runlog 2> errolog
if [ $? -ne 0 ]
then #命令错误处理
read -r line1 < errolog
echo -e "\n文件信息获取失败:${line1}"
echo -e "新建一个文件'${var2}'。(Press CRT+D 结束创建)"
cat > ${var2}
fi
#命令正确处理
ls -l "${var2}" > runlog #用于读取新建文件信息
read -r line2 < runlog
echo -e "\n初始文件${var2}的状态信息为: ${line2}"
size=$(cat "${var2}" | wc -c)
change=0 #用于保存文件状态的次数
for((i=0;i<"${loop}";i++))
do if [ ${change} -eq 2 ]
then
exit 0
else
echo -e "\n正在检测文件大小状态..."
size1=$(cat "${var2}" | wc -c)
if [ ${size} -eq ${size1} ] #文件大小未变
then
echo
else
change=$((${change} + 1 )) #文件状态改变一次change变量加一
size=${size1} #改变了的size1赋值给size变量
ls -l "${var2}" > runlog #用于读取新建文件信息
read line2 < runlog
if [ ${change} -eq 1 ]
then
echo -e "\n文件状态第一次发生变化,此时文件状态信息为${line2}"
else
echo -e "\n文件状态第二次发生变化,此时文件状态信息为${line2}"
fi
tput setaf 5
echo "文件大小变为:${size1}(字节数)"
tput sgr0
fi
fi
sleep 3s
done
用户状态检测
-
编写一个用户监测程序usr_monitor, 其运行格式为:
usr_monitor username
其中username是用户指定的任意一个用户名。程序运行时首先列出当前系统中的已登录用户的名单,再检查指定用户是否已登录。如果已登录,则显示相应信息;如果未登录,则等待该用户登录,直到指定用户登录进入系统为止。
-
实现代码:
!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage : usr_monitor username"
exit 0;
fi #命令参数不为一就退出
userlist=$(who -q | awk 'NR == 1'); #执行命令结果后参数:第一行记录传入userlist
echo -e "\nMoniter if user [$1] is logon...\n"
echo -e "Current userlist is:\n${userlist}\n"
usernum=0
for name in ${userlist}
do
usernum=$(expr ${usernum} + 1)
done #记录统计已登录的人数
i=0
for name in ${userlist}
do
if [ $name = $1 ]
then
tput setaf 5
echo -e "\nuser [$1] is logon."
tput sgr0
echo -e "exit..."
exit 0
fi
i=$(expr ${i} + 1)
done #判断检测用户是否已登陆和统计循环次数
while [ ${i} -eq ${usernum} ]
do
echo -ne "waiting for user [$1]..."
echo -e "\n"
sleep 5
userlist=$(who -q | awk 'NR==1');
usernum=0
for name in ${userlist}
do
usernum=$(expr ${usernum} + 1)
done #记录统计已登录的人数
i=0
for name in ${userlist}
do
if [ $name = $1 ]
then
tput setaf 5
echo -e "\nuser [$1] is logon."
tput sgr0
echo -e "exit..."
exit 0
fi
i=$(expr ${i} + 1)
done
done
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 VincentVan!
评论