Answers:
$> cat ./deploymLog.sh
#!/bin/bash
name=$1
log_file="Logone.txt"
if [[ -n "$name" ]]; then
echo "$1=$( date +%s )" >> ${log_file}
else
echo "argument error"
fi
命令行中的第一个参数可以与positional参数一起找到$1
。[[ -n "$name" ]]
测试以查看是否$name
不为空。
date +%s
返回Unix时间的当前时间戳。通过将>>
运算符附加到文件中的现有数据,可以用来写入文件。
$> ./deploymLog.sh tt
$> cat Logone.txt
tt=1329810941
$> ./deploymLog.sh rr
$> cat Logone.txt
tt=1329810941
rr=1329810953
对于更可读的时间戳,您可以使用date
参数。
可通过$1
(第一个),$n
(第n个)或$*
(所有参数)访问Shell命令行参数,因此您的脚本应以以下形式启动:
#!/bin/bash
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
现在可以从脚本中访问name参数$name
。
要获取时间戳,请使用date(1)
命令并为其指定格式说明符,以便产生所需的格式:
now=$(date +%Y%m%d%H%M%S)
现在$now
包含当前日期和时间。
因此,您可以这样创建日志文件:
logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile
最好使用shell函数来记录您的消息,因为它更易于使用:
function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
请注意,shell函数以与脚本相同的方式访问自己的参数(通过$1
等)。
因此,初始脚本如下所示:
#!/bin/bash
function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
now=$(date +%Y%m%d%H%M%S)
logfile=/path/to/log/file/mylogfile.$now
logit name = $name
(请注意,日志文件的格式与您指定的格式不完全相同;日志文件的格式更好,每行的开头都带有时间戳)。
#!/bin/bash
name=$1
echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log
运行“ bash deploymLog.sh what”,然后得到x.log
20120220-23:53:50 => whatever
name=$1
。绝对不会使用变量$ name,因为从字面上仅输出字符串'name'。
name="$1"
[[ -n "$name" ]]
零件的作用将非常有帮助。