#!/bin/tcsh -f
set date = ${1}
set time = ${2}
echo 1
set month = `echo $date | cut -f1 -d"-"`
set day = `echo $date | cut -f2 -d"-"`
set year = `echo $date | cut -f3 -d"-"`
echo $date $month $day $year
echo $date $time
if ($year > 69) then
@ year = $year + 1900
else
@ year = $year + 2000
endif
echo 3
if ($month == "Jan") set month = 01
if ($month == "Feb") set month = 02
if ($month == "Mar") set month = 03
if ($month == "Apr") set month = 04
if ($month == "May") set month = 05
if ($month == "Jun") set month = 06
if ($month == "Jul") set month = 07
if ($month == "Aug") set month = 08
if ($month == "Sep") set month = 09
if ($month == "Oct") set month = 10
if ($month == "Nov") set month = 11
if ($month == "Dec") set month = 12
echo 4
set hour1 = `echo $time | cut -c1`
set hour2 = `echo $time | cut -c2`
set min1 = `echo $time | cut -c4`
set min2 = `echo $time | cut -c5`
set ampm = `echo $time | cut -c6`
echo $hour1 #$hour2 $min1 $min2
if ($ampm =~ [pP]) then
@ hour1 = $hour1 + 1
@ hour2 = $hour2 + 2
endif
if ($day < 10) then
printf "%s%s0%s%s%s%s%s" $year $month $day $hour1 $hour2 $min1 $min2
else
printf "%s%s%s%s%s%s%s" $year $month $day $hour1 $hour2 $min1 $min2
endif
基本上,程序所做的是接收2个参数,例如Sep-22-07 11:45am
并以yyyymmddhhmm
- 200709071145
现在奇怪的事情发生在我开始发送第二个参数时带有两个零,例如... 00:01 am。然后整个月份,设定日期,设定年份开始变得怪异并且返回我的输出:
0.000u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w
0.000u 0.001s 0:00.00 0.0% 0+0k 0+8io 0pf+0w
0.000u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w
+其他输出。
程序中有其他回声,但我只是用它们来调试。
无论如何,提前谢谢。我是一个CShell的新手,所以如果这是一个简单的bug我很抱歉,但我似乎无法找到它。
答案 0 :(得分:2)
tcsh中的命令set time
(没有参数)用于启用shell执行的每个命令的计时。这是您所看到的额外输出的来源。显然
set time = 00:01am
或类似的具有相同的效果 - 我不知道为什么领先的“00:”会产生影响, 但它在命令行中很容易重现。
既然你提到你是C shell的新手,我觉得有必要引导你去Tom Christiansen的这篇文章:
Csh Programming Considered Harmful
许多程序员喜欢使用Bourne shell或其衍生产品(ksh,bash ...)进行非交互式脚本编写,以避免上述文章中描述的许多问题。
答案 1 :(得分:0)
的 设定时间= x; 允许用户设置何时记录命令时间的阈值。如果将此阈值设置为低,则会将所有命令的时间设置为超过该阈值。如果x设置为一个相对较高的数字,那么只有那些超过该阈值的数字会被定时,并产生您正在看到的输出,因此这就是您在将时间设置为00:数字时才能看到它的原因。它是如何处理它们使用的时间格式并将其转换为秒,但是,这超出了我对此的理解。