![将命令行参数传递给 bash 脚本](https://linux22.com/image/21025/%E5%B0%86%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%20bash%20%E8%84%9A%E6%9C%AC.png)
我是 bash 脚本编程新手。
我想实现一个 bash 脚本“deploymLog”,它接受一个字符串参数(名称)作为输入。
[root@localhost Desktop]# ./deploymLog.sh name
这里我想通过命令行传递字符串参数(名称)
作为初始步骤,我需要将当前时间戳连同此输入字符串附加到Logone.txt
当前目录中的日志文件中,格式如下:
[name]=[System time timestamp1]
怎么可能呢?
答案1
$> 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
命令行中的第一个参数可以通过位置参数找到$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
参数。
答案2
Shell 命令行参数可通过$1
(第一个)、$n
(第 n 个)或$*
(所有参数)访问,因此您的脚本应该启动:
#!/bin/bash
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
现在,名称参数可以从脚本中访问为$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
(请注意,日志文件的格式与您指定的格式不同;它采用更好的格式,并且在每行开头都有时间戳)。
答案3
#!/bin/bash
name=$1
echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log
运行“bashdeploymLog.shwhatever”,你会得到 x.log
20120220-23:53:50 => whatever