bash脚本,a.sh: line 3: ((: 0945: value too great for base (error token is "0945")

本文介绍了一个在Bash脚本中定时执行JMeter测试时遇到的错误,并详细解释了如何通过将数值转换为十进制来解决这个问题。错误发生在使用双括号进行时间比较时,由于误将时间作为八进制数解析而导致。

写个脚本定时执行jmeter脚本,在处理时间时,报了value too great for base的问题

起因:在(())双括号里的运算,会将0945转换为8进制,09超过了8进制的范围了,所以报错

解决办法:将数值转为10进制,变量前面添加 ‘’  10#  ‘’即可

 

a.sh(有bug版)

#!/bin/bash
ms=`date +%-H%M`
while (($1 != $ms))
do
  ms=`date +%H%M`
done
jmeter -n -t $2 -l $3.jtl -j $3.log

解决办法:将数值转为10进制,变量前面添加 ‘’  10#  ‘’即可

a.sh(解决了的版本)

#!/bin/bash
ms=`date +%-H%M`
while ((10#$1 != 10#$ms))
do
  ms=`date +%H%M`
done
jmeter -n -t $2 -l $3.jtl -j $3.log

#!/bin/bash # 定义目标目录 base_dir="/home/trade/product_env/backup" output_file="${base_dir}/fout.txt" # 清空或创建输出文件 > "$output_file" # 动态计算日期范围:从指定日期到上个月的第一天 get_date_range() { local current_date="$1" local last_month_first_day # 计算上个月的第一天 last_month_first_day=$(date -d "$current_date -$(($(date -d "$current_date" +%d) - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } # 将 out.sh 的功能封装为函数 generate_output() { local log_path="$1" local output_file="$2" cd "$log_path" || return # 创建一个临时文件,用于保存经过处理后的唯一行 temp_file=$(mktemp) # 提取目录名作为当前日期(假设目录名格式为 YYYYMMDD) current_date=$(basename "$(dirname "$(dirname "$log_path")")") # 获取动态日期范围 read -r start_date end_date <<< "$(get_date_range "$current_date")" # 查找指定日期范围内的Log.txt文件 find . -name "*$start_date*Log.txt" -o -name "*$end_date*Log.txt" | while IFS= read -r file; do # 在文件中查找特定字段,并处理数据 grep -E "172.22.88.*result=okay:user=" "$file" | cut -d&#39;:&#39; -f6,8,9 | sort | uniq >> "$temp_file" done # 将临时文件内容写入输出文件 cat "$temp_file" > out.txt rm "$temp_file" # 合并并去重输出 sort out.txt | uniq >> "$output_file" rm "out.txt" } # 查找符合每月一号格式的目录(如 20250401) for dir in $(find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]" | sort); do # 遍历 day 和 night 目录 for sub_dir in day night; do log_path="${dir}/${sub_dir}/log" if [ -d "$log_path" ]; then # 调用封装好的函数替代 out.sh generate_output "$log_path" "$output_file" fi done done # 最终去重和排序 sort -u "$output_file" -o "$output_file" echo "操作已完成,结果已汇总至 ${output_file}"根据这段代码 分析其报出得错误./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") 并修改代码
08-09
#!/bin/bash # 定义目标目录 base_dir="/home/trade/product_env/backup" output_file="${base_dir}/fout.txt" # 清空或创建输出文件 > "$output_file" # 动态计算日期范围:从指定日期到上个月的第一天 get_date_range() { local current_date="$1" local last_month_first_day # 计算上个月的第一天 last_month_first_day=$(date -d "$current_date -$(($(date -d "$current_date" +%d) - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } # 将 out.sh 的功能封装为函数 generate_output() { local log_path="$1" local output_file="$2" cd "$log_path" || return # 创建一个临时文件,用于保存经过处理后的唯一行 temp_file=$(mktemp) # 提取目录名作为当前日期(假设目录名格式为 YYYYMMDD) current_date=$(basename "$(dirname "$(dirname "$log_path")")") # 获取动态日期范围 read -r start_date end_date <<< "$(get_date_range "$current_date")" # 查找指定日期范围内的Log.txt文件 find . -name "*$start_date*Log.txt" -o -name "*$end_date*Log.txt" | while IFS= read -r file; do # 在文件中查找特定字段,并处理数据 grep -E "172.22.88.*result=okay:user=" "$file" | cut -d&#39;:&#39; -f6,8,9 | sort | uniq >> "$temp_file" done # 将临时文件内容写入输出文件 cat "$temp_file" > out.txt rm "$temp_file" # 合并并去重输出 sort out.txt | uniq >> "$output_file" rm "out.txt" } # 查找符合每月一号格式的目录(如 20250401) for dir in $(find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]" | sort); do # 遍历 day 和 night 目录 for sub_dir in day night; do log_path="${dir}/${sub_dir}/log" if [ -d "$log_path" ]; then # 调用封装好的函数替代 out.sh generate_output "$log_path" "$output_file" fi done done # 最终去重和排序 sort -u "$output_file" -o "$output_file" echo "操作已完成,结果已汇总至 ${output_file}"根据这段代码分析错误./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08")并修改代码输出修改后全部代码
08-09
#!/bin/bash # 定义目标目录 base_dir="/home/trade/product_env/backup" output_file="${base_dir}/fout.txt" # 清空或创建输出文件 > "$output_file" # 动态计算日期范围:从指定日期到上个月的第一天 get_date_range() { local current_date="$1" local last_month_first_day # 计算上个月的第一天 last_month_first_day=$(date -d "$current_date -$(($(date -d "$current_date" +%d) - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } # 将 out.sh 的功能封装为函数 generate_output() { local log_path="$1" local output_file="$2" cd "$log_path" || return # 创建一个临时文件,用于保存经过处理后的唯一行 temp_file=$(mktemp) # 提取目录名作为当前日期(假设目录名格式为 YYYYMMDD) current_date=$(basename "$(dirname "$(dirname "$log_path")")") # 获取动态日期范围 read -r start_date end_date <<< "$(get_date_range "$current_date")" # 查找指定日期范围内的Log.txt文件 find . -name "*$start_date*Log.txt" -o -name "*$end_date*Log.txt" | while IFS= read -r file; do # 在文件中查找特定字段,并处理数据 grep -E "172.22.88.*result=okay:user=" "$file" | cut -d&#39;:&#39; -f6,8,9 | sort | uniq >> "$temp_file" done # 将临时文件内容写入输出文件 cat "$temp_file" > out.txt rm "$temp_file" # 合并并去重输出 sort out.txt | uniq >> "$output_file" rm "out.txt" } # 查找符合每月一号格式的目录(如 20250401) for dir in $(find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]" | sort); do # 遍历 day 和 night 目录 for sub_dir in day night; do log_path="${dir}/${sub_dir}/log" if [ -d "$log_path" ]; then # 调用封装好的函数替代 out.sh generate_output "$log_path" "$output_file" fi done done # 最终去重和排序 sort -u "$output_file" -o "$output_file" echo "操作已完成,结果已汇总至 ${output_file}"根据这段代码 分析./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 09: value too great for base (error token is "09") ./output.sh: line 16: 08: value too great for base (error token is "08") ./output.sh: line 16: 08: value too great for base (error token is "08") 操作已完成,结果已汇总至 /home/trade/product_env/backup/fout.txt 这个错误并修改代码 输出修改完的从头到尾全部代码
最新发布
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值