-bash: 08: value too great for base (error token is "08")

在使用shell的时候,获取的当前的小时或月份(08,09等)进行计算是,提示:

hour=08
hour=$((hour)) 
-bash: 08: value too great for base (error token is "08")

搜索之后发现0开头的数字表示八进制,在八进制数中,当然没有08,09 等这样的数,所以需要在$hour 前加 10# ,这样就表示 这是十进制,就不会报错了。
修改之后:

hour=08
hour=$((10#$hour))

这样获取的hour 就是 我们所要的十进制 8

本文出自“筱Mary”博客,转载请务必保留此处 http://blog.youkuaiyun.com/qq_31382921/article/details/72676022

#!/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':' -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':' -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':' -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、付费专栏及课程。

余额充值