我是bash脚本编程的新手。

我想实现bash脚本'deploymLog',该脚本接受一个字符串参数(名称)作为输入。

[root@localhost Desktop]# ./deploymLog.sh name


这里我想通过命令行传递字符串参数(名称)

作为第一步,我需要将当前时间戳以及此输入字符串附加到日志文件中,例如Logone.txt在当前目录中,格式如下:

[name]=[System time timestamp1]


怎么可能?

#1 楼

$> cat ./deploymLog.sh 
#!/bin/bash

name=
log_file="Logone.txt"

if [[ -n "$name" ]]; then
    echo "=$( date +%s )" >> ${log_file}
else
    echo "argument error"
fi


命令行中的第一个参数可以与位置参数找到。 [[ -n "$name" ]]测试以查看$name是否不为空。
date +%s返回Unix时间的当前时间戳。 >>运算符用于通过附加到文件中的现有数据来写入文件。

/>

评论


总体来说,这里的初学者...了解[[--n“ $ name”]]部分的工作将很有帮助。

–MichaelChirico
16年6月13日在16:14

“ [[-n” $ name“]]”是“ test”命令的另一种形式。请参阅:ss64.com/bash/test.html

–jewettg
16年8月1日在19:44

#2 楼

可通过(第一个),$n(第n个)或$*(所有参数)访问Shell命令行参数,因此您的脚本应以以下形式开始:
名称参数可以从脚本中以$name进行访问。

要获取时间戳,请使用date(1)命令并为其指定格式说明符,以便产生所需的格式:

现在$now包含当前日期和时间。

因此您可以这样创建日志文件:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo 
now=$(date +%Y%m%d%H%M%S)
: usage: myscript name exit 1 fi name=


最好使用shell函数来记录消息,因为它更易于使用:作为脚本(通过等)。因此,初始脚本如下所示:

logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile


(请注意,日志文件不是是您指定的确切格式;最好是每行开头都带有时间戳的格式。

#3 楼

#!/bin/bash

name=

echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log


运行“ bash deploymLog.sh随便什么”,并且x.log带有

评论


当您投反对票时,请给出理由,谢谢。

–Dyno Hongjun Fu
2012年2月21日在8:17

我想投票者错过了name = $ 1的原因。永远不会使用变量$ name,因为您只会按字面意义输出字符串'name'。

–manatwork
2012年2月21日在15:24

哦,我的坏。感谢您指出。我需要更加小心。

–Dyno Fu
2012年2月23日在15:39

@DynoHongjunFu变量仍然具有相同的名称和值,这不是使示例易于阅读的好方法。

– Volker Siegel
14-10-26在15:06

像这样分配名称时,最好引用var:name =“ $ 1”

–杰克
2015年4月9日在18:03