比较文件有无修改,通过修改时间判别
# !/bin/bash dir=$1 for file in `ls $dir` do if [ -d $dir/$file ] then echo $file is dir else time=`stat $file | tail -2 | head -1 | cut -d' ' -f2-3 | cut -d. -f1` name=$file currentTime=`date "+%Y-%m-%d %H:%M:%S"` echo "$name $time $currentTime" oldtime=`date +%s -d "$time"` newtime=`date +%s -d "$currentTime"` # echo $(($newtime-$oldtime)) if [ $(($oldtime-$newtime)) -ge 0 ] then echo "$file is a new file" else echo "$file not modify" fi fi done
自动创建n的测试文件
#!/bin/bash #echo $# if [ $# -eq 1 ] then nums=$1 # echo $nums for((i=0;i<$nums;i++)) do #sleep 1 touch ./file-`date +%F-%H-%M-%S`-$i.txt done else echo "you need input nums like ./app nums,bye" exit -1 fi
判断时段内文件有无更新
# !/bin/bash dir=$1 for file in `ls $dir` do if [ -d $dir/$file ] then echo $file is dir else file=$dir/$file #获取最后修改时间,并截取成 y-m-d h:m:s time=`stat -c %y $file | cut -d. -f1` name=$file currentTime=`date "+%Y-%m-%d %H:%M:%S"` echo "$name $time $currentTime" #将字符串时间转换成数字,距1970年的时间 #文件当前的最后修改时间 oldtime=`date +%s -d "$time"` #系统当前时间 newtime=`date +%s -d "$currentTime"` #时间偏移量,这里定义为一天24*60*60,意味着一天扫描一次,如需修改扫描次数,修改这个地方就行 shifttime=86400 #这里用当前文件最后修改时间,与一天前的时刻做比较,如果大于0,说明文件在从昨天这个时刻到今天这个时刻之间发生了变化,偏移量不是一天时,代表的是这段时间内 #测试 shifttime=600 10分钟 #shifttime=600 if [ $(($oldtime-$newtime+$shifttime)) -ge 0 ] then echo "$file is a new file" else echo "$file not modify" fi fi done
统计history信息
#!/bin/bash USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` HISTDIR=/usr/share/.history if [ -z $USER_IP ] then USER_IP=`hostname` fi if [ ! -d $HISTDIR ] then mkdir -p $HISTDIR chmod 777 $HISTDIR fi if [ ! -d $HISTDIR/${LOGNAME} ] then mkdir -p $HISTDIR/${LOGNAME} chmod 300 $HISTDIR/${LOGNAME} fi export HISTSIZE=4000 DT=`date +%Y%m%d_%H%M%S` export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]" chmod 600 $HISTDIR/${LOGNAME}/*.history.* 2>/dev/null
捕获信号
#!/bin/bash trap "echo sigint" SIGINT echo "This is a test program" count=1 while [ $count -le 10 ] do echo "Loop #$count" sleep 2 count=$[ $count +1 ] done echo "This is the end of the test program"
read使用
#!/bin/bash #simple read echo -n "Enter your name:" read name echo "Hello $name,welcome!" #read 指定 read -p "Please enter your age:" age days=$[ $age * 365 ] echo "That makes you over $days days old" #read 不带变量,存在默认变量REPLY中 read -p "Please enter your age:" echo "your age is $REPLY" #read 延时选项 read -t 2 -p "Please enter your age:" echo "your age is $REPLY" #read 默读 read -s -p "Please enter your passwd:" echo "your passwd is $REPLY" read读文件 #!/bin/bash #read file if [ $# -lt 1 ] then echo "Usage ./readfile.sh testfile" exit -1 fi echo "file name is $1" count=1 cat $1 | while read line do echo "Line $count:$line" count=$[ $count+1 ] done echo "Finished processing the file"
打开文件
-------------------------------------------------------------------------------- #!/bin/bash #open exec 3> test echo "This is a test line of data" >&3 #close exec 3>&- echo "This won't work" >&3