1. Linux shell脚本输出日志笔记整理
1.日志方法简介:
#日志名称
log="./upgrade.log" #操作日志存放路径
fsize=2000000 #如果日志大小超过上限,则保存旧日志,重新生成日志文件
exec 2>>$log #如果执行过程中有错误信息均输出到日志文件中
#日志函数
#参数
#参数一,级别,INFO ,WARN,ERROR
#参数二,内容
#返回值
function zc_log()
{
#判断格式
if [ 2 -gt $# ]
then
echo "parameter not right in zc_log function" ;
return ;
fi
if [ -e "$log" ]
then
touch $log
fi
#当前时间
local curtime;
curtime=`date +"%Y%m%d%H%M%S"`
#判断文件大小
local cursize ;
cursize=`cat $log | wc -c` ;
if [ $fsize -lt $cursize ]
then
mv $log $curtime".out"
touch $log ;
fi
#写入文件
echo "$curtime $*" >> $log;
}
2.使用举例
shell脚本内容:
#! /bin/bash
#数据库变量
localpasswd=xxxx
mysqlhost=xxxx
mysqluser=xxxx
mysqlpasswd=xxxx
#日志名称
log="./upgrade.log" #操作日志存放路径
fsize=2000000
exec 2>>$log #如果执行过程中有错误信息均输出到日志文件中
#日志函数
#参数
#参数一,级别,INFO ,WARN,ERROR
#参数二,内容
#返回值
function zc_log()
{
#判断格式
if [ 2 -gt $# ]
then
echo "parameter not right in zc_log function" ;
return ;
fi
if [ -e "$log" ]
then
touch $log
fi
#当前时间
local curtime;
curtime=`date +"%Y%m%d%H%M%S"`
#判断文件大小
local cursize ;
cursize=`cat $log | wc -c` ;
if [ $fsize -lt $cursize ]
then
mv $log $curtime".out"
touch $log ;
fi
#写入文件
echo "$curtime $*" >> $log;
}
echo "start update shell" ;
mysql -h$sqlip -u$sqluser -p$sqlpasswd -e "use $db;
set names gbk;
--
--
的结构 msgm_qdjyly
--
DROP TABLE IF EXISTS msgm_qdjyly;
CREATE TABLE IF NOT EXISTS msgm_qdjyly (
jylyid int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
jylb varchar(20) DEFAULT NULL COMMENT '交易类别',
jylbmc varchar(50) DEFAULT NULL COMMENT '交易类别名称',
jgm varchar(10) NOT NULL COMMENT '机构码',
lyfs int(11) NOT NULL COMMENT '路由方式,1指定渠道,2按卡bin渠道',
qdbh varchar(20) DEFAULT NULL COMMENT '渠道编号',
qdmc varchar(50) DEFAULT NULL COMMENT '渠道名称',
zt int(11) NOT NULL DEFAULT '1' COMMENT '状态,1正常,2关闭',
bz varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (jylyid)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='交易路由信息' AUTO_INCREMENT=7 ;
zc_log INFO "执行 CREATE TABLE msgm_qdjyly 命令的结果为 : $? " ;
echo "执行 CREATE TABLE msgm_qdjyly 命令的结果为 : $? " ;
2. Linux自动清理日志shell脚本
发布时间:2014-12-21 编辑:www.jquerycn.cn
本文介绍了linux下自动清理日志的一段shell脚本,根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志。
1.做自动部署系统时精简的一个脚本,主要功能是清理所有目录的日志
2.根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志
3.扩展,因为脚本采用mtime(最后修改时间)进行删除,所以可以适用于删除过期备份等,不受文件名称的限制
shell小窍门
find –type f –print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除 更改操作,会有影响
所以需要增加 –print0 用 null来 作为边界符号,才敢结婚 xargs –o 来格式化输入
使用find 的时候 遵循最小结果集原则,find解析式从左到右,所有确保你在最左边的过滤符号能够过滤最大数据
可以根据需要增加到crontab中。
复制代码代码示例:
#!/bin/sh
###########################
#delete log blog.duplicatedcode.com
# in_day_num: like 1 2 is delete 2day ago logs
# in_log_path like tomcat log home
###########################
in_log_path=${1}
in_day_num=${2}
tmp_delete_log=/var/log/deletelog/"`date +%Y%m`.log"
deleteLog()
{
inner_num=${1}
#find log
echo "[`date`] >> start delete logs---" >> $tmp_delete_log
find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
echo "[`date`] >> end delete logs---" >> $tmp_delete_log
}
init()
{
mkdir -p /var/log/deletelog/
}
main()
{
init
if [ -z ${in_log_path} ];then
echo "[`date`] >> error log_path not init---" >> $tmp_delete_log
return
fi
inner_day_num=+7
if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then
${inner_day_num}=${in_day_num}
fi
deleteLog ${inner_day_num}
}
main
3. 一些简单的shell脚本实例
2011-12-30 15:56:22| 分类: 脚本开发|举报|字号 订阅
下载LOFTER我的照片书 |
自己写了一下小的shell实例,虽然很小,但所有的大的程序都是由小的模块堆积起来的,程序员一定要懂得一种脚本的书写,而我,只会在linux下工作,所以就只能写linux的shell脚本了,呵呵,本文会陆续更新,给自己加油!
1.模拟linnux登录shell
#/bin/bash
echo -n "login:"
read name
echo -n "password:"
read passwd
if [ $name = "cht" -a $passwd = "abc" ];then
echo "the host and password is right!"
else echo "input is error!"
fi
2.比较两个数大小
#/bin/bash
echo "please enter two number"
read a
read b
if test $a -eq $b
then echo "NO.1 = NO.2"
elif test $a -gt $b
then echo "NO.1 > NO.2"
else echo "NO.1 < NO.2"
fi
3.查找/root/目录下是否存在该文件
#/bin/bash
echo "enter a file name:"
read a
if test -e /root/$a
then echo "the file is exist!"
else echo "the file is not exist!"
fi
4.for循环的使用
#/bin/bash
clear
for num in 1 2 3 4 5 6 7 8 9 10
do
echo "$num"
done
5.命令行输入
#/bin/bash
echo "Please enter a user:"
read a
b=$(whoami)
if test $a = $b
then echo "the user is running."
else echo "the user is not running."
fi
6.删除当前目录下大小为0的文件
#/bin/bash
for filename in `ls`
do
if test -d $filename
then b=0
else
a=$(ls -l $filename | awk '{ print $5 }')
if test $a -eq 0
then rm $filename
fi
fi
done
7.如果/export/um_lpp_source下有文件,那么将其文件系统大小改为3G
#/bin/bash
while line=`ls /export/um_lpp_source`
do
if test $line=""
then echo "NULL"
sleep 1
else echo $line
chfs -a size=3G /export/um_lpp_source
exit 0
fi
done
8.测试IP地址
#/bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
echo "the number of $i computer is "
ping -c 1 192.168.0.$i
done
9.如果test.log的大小大于0,那么将/opt目录下的*.tar.gz文件
#/bin/sh
a=2
while name="test.log"
do
sleep 1
b=$(ls -l $name | awk '{print $5}')
if test $b -ge $a
#then echo "OK"
then `cp /opt/*.tar.gz .`
exit 0
fi
done
10.打印读取的内容,为下面的例子做准备
#/bin/bash
while read name
do
echo $name
done
11.从0.sh中读取内容并打印
#/bin/bash
while read line
do
echo $line
done < 0.sh
12.读取a.c中的内容并做加1运算
#/bin/bash
test -e a.c
while read line
do
a=$(($line+1))
done < a.c
echo $a
13.普通无参数函数
#/bin/bash
p ()
{
echo "hello"
}
p
14.给函数传递参数
#/bin/bash
p_num ()
{
num=$1
echo $num
}
for n in $@
do
p_num $n
done
15.创建文件夹
#/bin/bash
while :
do
echo "please input file's name:"
read a
if test -e /root/$a
then
echo "the file is existing Please input new file name:"
else
mkdir $a
echo "you aye sussesful!"
break
fi
done
16.获取本机IP地址
#/bin/bash
ifconfig | grep "inet addr:" | awk '{ print $2 }'| sed 's/addr://g'
17.查找最大文件
#/bin/bash
a=0
for name in *.*
do
b=$(ls -l $name | awk '{print $5}')
if test $b -ge $a
then a=$b
namemax=$name
fi
done
echo "the max file is $namemax"