Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119291
  • 博文数量: 12
  • 博客积分: 1495
  • 博客等级: 上尉
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-23 09:22
文章分类

全部博文(12)

文章存档

2011年(1)

2008年(11)

我的朋友

分类: LINUX

2008-04-28 10:26:02

首先介绍一下环境
脚本内容如下:
[root@localhost shell]# more /home/shell/test1.sh
#!/bin/bash

_LOGINDIR='/home/shell/test/'
_LOGFILE='/home/shell/log1.txt'

which awk >> ${_LOGFILE}
for file in `ls ${_LOGINDIR}`
do
_LOGIN_YEAR=`basename ${file} | awk -F_ '{print $4}' |awk -F- '{print $1}'`
_LOGIN_MONTH=`basename ${file} | awk -F_ '{print $4}' |awk -F- '{print $2}'`
_LOGIN_DAY=`basename ${file} | awk -F_ '{print $4}' |awk -F- '{print $3}' | awk -F. '{print $1}'`
echo "file: $file" >>${_LOGFILE}
echo "year: $_LOGIN_YEAR" >>${_LOGFILE}
echo "month: $_LOGIN_MONTH" >>${_LOGFILE}
echo "day: $_LOGIN_DAY" >>${_LOGFILE}
echo "===========================" >> ${_LOGFILE}
done
[root@localhost shell]# more /home/shell/test2.sh
#!/bin/bash

_LOGINDIR='/home/shell/test/'
_LOGFILE='/home/shell/log2.txt'

which awk >> ${_LOGFILE}
for file in `ls ${_LOGINDIR}`
do
_LOGIN_YEAR=`basename ${file} | awk -F'[_-.]' '{print $4}'`
_LOGIN_MONTH=`basename ${file} | awk -F'[_-.]' '{print $5}'`
_LOGIN_DAY=`basename ${file} | awk -F'[_-.]' '{print $6}'`
echo "file: $file" >>${_LOGFILE}
echo "year: $_LOGIN_YEAR" >>${_LOGFILE}
echo "month: $_LOGIN_MONTH" >>${_LOGFILE}
echo "day: $_LOGIN_DAY" >>${_LOGFILE}
echo "===========================" >> ${_LOGFILE}
done

/home/shell/test/目录中的内容:
[root@localhost shell]# ll /home/shell/test/
total 0
-rw-r--r--  1 root root 0 Apr 23 12:31 wt_Login_1_2008-04-05.tgz

加在cron中的内容:
[root@localhost shell]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
*/1 * * * * root /home/shell/test1.sh
*/1 * * * * root /home/shell/test2.sh

系统版本:
Linux localhost 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux

问题:
手动执行test1.sh 和 test2.sh 都能正确获取到_LOGIN_YEAR,_LOGIN_MONTH,_LOGIN_DAY的值,但是加到cron中只有test1.sh 能正确获取到_LOGIN_YEAR,_LOGIN_MONTH,_LOGIN_DAY的值,test2.sh获取到的都是空的,不知道为什么!!!
 
问题的答案(此答案由本站的 提供):
是本地语言设置,比如我们常用 zh_cn.GBK而 cron通常是 C
这影响到 [m-n]这样的字符集到底包含什么字符
而你想要的是 _.-这三个字符,而不是从_到.这个区间的字符
以下是测试:
[waker@proxy ~]$ echo wt_Login_1_2008-04-05.tgz |LC_COLLATE='en_US.UTF-8' awk -F'[_-.]' '{print $4}'
2008
[waker@proxy ~]$ echo wt_Login_1_2008-04-05.tgz |LC_COLLATE=C awk -F'[_-.]' '{print $4}'
awk: fatal: Invalid range end: /[_-.]/
[waker@proxy ~]$ echo wt_Login_1_2008-04-05.tgz |LC_COLLATE=C awk -F'[_.-]' '{print $4}'
2008
我所发的原帖地址:
阅读(1335) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-05-14 18:22:35

呵呵,踩踩