./test.sh: line 12: [: too many arguments为啥报错具体怎么修改
时间: 2024-02-02 11:04:45 浏览: 118
用C/C++来实现 Node.js 的模块(二)
这个错误提示是因为在 if [ $date_str -eq $latest_time ] 这行代码中,$date_str 和 $latest_time 变量的值出现了多个参数,导致判断条件出错。这可能是因为 $date_str 或 $latest_time 变量的值中包含了空格或其他特殊字符。
为了避免这个问题,可以将 if 语句中的判断条件改为使用双等号(==)进行字符串比较,如下所示:
```
if [ "$date_str" == "$latest_time" ]; then
```
另外,建议在使用变量时加上双引号,例如 "${log_dir}",这样可以避免变量值中包含空格或其他特殊字符时出现的问题。
修改后的代码如下:
```
#!/bin/bash
# 定义变量
log_dir="/var/log/program_monitor"
# 创建日志目录
mkdir -p "${log_dir}"
log_file="${log_dir}/$(date +%Y%m%d%H%M).log"
function monitor(){
if [ -e /var/log/program_monitor/*.log ];then
echo "1"
latest_log=$(ls -t /var/log/program_monitor/*.log | head -1)
echo "2"
date_str=$(echo $latest_log | cut -d'/' -f5 | grep -oE '[0-9]{8}')
echo "3"
latest_time=$(date -d $date_str +%s)
current_time=$(date +%s)
echo "4"
if [ "$date_str" == "$latest_time" ]; then
echo "---------$(date)----------" >> $log_file
else
touch ${log_file}
fi
else
touch ${log_file}
fi
}
monitor
```
这样修改后,再次运行脚本就不会出现上述错误了。
阅读全文