当前位置: 技术问答>linux和unix
shell中的字符串问题
来源: 互联网 发布时间:2015-07-13
本文导语: 问题:想写一个脚本计算系统上一天的时间 比如20040301上一天20040229 假设: -------code------- B230 = "2005" B231 = "02" B232 = "01" if [ "$B231" != "01" ] then B231 = $B231 - 1 -------------ERROR-----------此处想得到的是01 --...
问题:想写一个脚本计算系统上一天的时间
比如20040301上一天20040229
假设:
-------code-------
B230 = "2005"
B231 = "02"
B232 = "01"
if [ "$B231" != "01" ]
then
B231 = $B231 - 1 -------------ERROR-----------此处想得到的是01
-------code-------
比如20040301上一天20040229
假设:
-------code-------
B230 = "2005"
B231 = "02"
B232 = "01"
if [ "$B231" != "01" ]
then
B231 = $B231 - 1 -------------ERROR-----------此处想得到的是01
-------code-------
|
用expr可以做数学运算。
B231 = `expr $B231 - 1`
B231 = `expr $B231 - 1`
|
to 楼主:
可以用 n=`expr $n + 1`得到。
我这里有个c程序,作用是检查是否是七天前的数据文本,你可以参考一下。
/* 检查是否是七天前的数据文本
Program Name : chfiledate.c
Usage : chfiledate.x Arg1 Arg2 Arg3
返回值:
0:不需要删除; 1:删除
命令行参数:
Arg1:数据文本日期
Arg2:系统日期
Arg3:间隔天数
*/
#include
#include
#include
#include
#include
char* substr(char*,int,int);
int mod(int,int);
int main(int argc, char* argv[])
{
int m_days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
int year1,month1,day1;
int fate,aaa;
/*µÃµ½µÚÒ»¸ö²ÎÊýµÄÄêÔÂÈÕ*/
year=atoi(substr(argv[1],0,4));
month=atoi(substr(argv[1],4,2));
day=atoi(substr(argv[1],6,2));
/*µÃµ½µÚ¶þ¸ö²ÎÊýµÄÄêÔÂÈÕ(×Ô¼ºÈ¡µÄϵͳʱ¼ä)*/
year1=atoi(substr(argv[2],0,4));
month1=atoi(substr(argv[2],4,2));
day1=atoi(substr(argv[2],6,2));
/*µÃµ½µÚÈý¸ö²ÎÊý(Ò»°ãÊÇ7)*/
fate=atoi(argv[3]);
if ((year%4==0)&&!(year%100==0)||(year%400==0))
{
m_days[1]=29;
}
if (year == year1)
{
if (month == month1)
{
if ( day1 day)
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
}
else {
if ( (month1 - 1) > month )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else if ( (month1 - 1) == month )
{
if ( (m_days[month - 1] - day + day1) > fate )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
else return 0;
}
}
else {
if ((year1 - 1) > year)
{
printf("ÐèҪɾ³ý!");
return 1;
}
else if ((year1 - 1) == year)
{
if ((month == 12)&&(month1 == 1))
{
if ((m_days[month - 1] - day + day1) > fate )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
else {
printf("ÐèҪɾ³ý!");
return 1;
}
}
else return 0;
}
}
char* substr(char* str,int is,int il)
{ char* nstr;
int i,j;
nstr=(char *)malloc(strlen(str));
for(i=0,j=0;i=is&&i
可以用 n=`expr $n + 1`得到。
我这里有个c程序,作用是检查是否是七天前的数据文本,你可以参考一下。
/* 检查是否是七天前的数据文本
Program Name : chfiledate.c
Usage : chfiledate.x Arg1 Arg2 Arg3
返回值:
0:不需要删除; 1:删除
命令行参数:
Arg1:数据文本日期
Arg2:系统日期
Arg3:间隔天数
*/
#include
#include
#include
#include
#include
char* substr(char*,int,int);
int mod(int,int);
int main(int argc, char* argv[])
{
int m_days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
int year1,month1,day1;
int fate,aaa;
/*µÃµ½µÚÒ»¸ö²ÎÊýµÄÄêÔÂÈÕ*/
year=atoi(substr(argv[1],0,4));
month=atoi(substr(argv[1],4,2));
day=atoi(substr(argv[1],6,2));
/*µÃµ½µÚ¶þ¸ö²ÎÊýµÄÄêÔÂÈÕ(×Ô¼ºÈ¡µÄϵͳʱ¼ä)*/
year1=atoi(substr(argv[2],0,4));
month1=atoi(substr(argv[2],4,2));
day1=atoi(substr(argv[2],6,2));
/*µÃµ½µÚÈý¸ö²ÎÊý(Ò»°ãÊÇ7)*/
fate=atoi(argv[3]);
if ((year%4==0)&&!(year%100==0)||(year%400==0))
{
m_days[1]=29;
}
if (year == year1)
{
if (month == month1)
{
if ( day1 day)
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
}
else {
if ( (month1 - 1) > month )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else if ( (month1 - 1) == month )
{
if ( (m_days[month - 1] - day + day1) > fate )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
else return 0;
}
}
else {
if ((year1 - 1) > year)
{
printf("ÐèҪɾ³ý!");
return 1;
}
else if ((year1 - 1) == year)
{
if ((month == 12)&&(month1 == 1))
{
if ((m_days[month - 1] - day + day1) > fate )
{
printf("ÐèҪɾ³ý!");
return 1;
}
else {
return 0;
}
}
else {
printf("ÐèҪɾ³ý!");
return 1;
}
}
else return 0;
}
}
char* substr(char* str,int is,int il)
{ char* nstr;
int i,j;
nstr=(char *)malloc(strlen(str));
for(i=0,j=0;i=is&&i