gpt4 book ai didi

bash 语法错误 : invalid arithmetic operator with token "@mail.com"

转载 作者:行者123 更新时间:2023-11-29 09:24:08 30 4
gpt4 key购买 nike

我有一个执行 SQL SELECT 并使用输出发送一些电子邮件的脚本,但该脚本存在问题导致出现错误消息:

line 34: johne@mail.com: syntax error: invalid arithmetic operator (error token is "@mail.com")

第 34 行是:

if (( ${msgData[$email]:-0} < $(LC_TIME=C date -d yesterday +%s) )); then

这是脚本:

#!/bin/bash
${BASH_VERSION+shopt -s extglob lastpipe} 2>/dev/null

# Full path to a file to store our date offset data. Will be overwritten.
datefile=date.log

# Assign your vars or insert whatever code does so here.
user=user pass=pass db=db

function doit {
typeset x
for x; do
if [[ -z $x ]]; then
echo 'doit: missing an argument.' >&2
return 1
fi
done

typeset template=$(</dev/fd/4)
exec 4<&-
sqlplus "${1}/${2}@${3}" <&3 | {
if [[ -f $datefile ]]; then
. "$datefile" || return 1
else
# An associative array that maps from num -> timestamp
typeset -A msgData
fi

# If we've successfully read the file containing timestamps, then overwrite with new data on RETURN
${msgData+trap 'trap RETURN; typeset -p msgData >"$datefile"' RETURN}

while IFS=, read -r num email limit orders; do
${email:+:} continue
if (( ${msgData[$email]:-0} < $(LC_TIME=C date -d yesterday +%s) )); then
printf -- "$template" "email" "$num" "$limit" "$orders" |
/usr/sbin/sendmail -f sender@example.com -oi -t

msgData[$email]=$(LC_TIME=C date +%s)
else
printf 'Mail already sent to %s within the last 24 hours... skipping.\n' "$email" >&2
fi
done
}
} 5<&0 <<\SQL 3<&0 <<\TEMPLATE 4<&0 <&5-
set pagesize 0
set feedback 0

SELECT kred_lim.kunr ||','|| kust_adr.ku_email ||','|| kred_lim.kred_limit ||','|| kred_lim.kred_zu_zahlen
FROM kred_lim, kust_adr
WHERE kred_lim.kred_zu_zahlen > kred_lim.kred_limit
AND kred_lim.kunr = kust_adr.ku_nr;
SQL
Subject: Credit limit
To: %s

Customer number: %s
Credit limit: %s
Current orders: %s
TEMPLATE

if ! doit "$user" "$pass" "$db"; then
echo 'we failed :(' >&2
exit 1
fi

最佳答案

问题是您正试图在算术表达式中执行字符串比较。要么切换到复合表达式:

if [[ ${msgData[$email]:-0} < $(LC_TIME=C date -d yesterday +%s) ]]; then

或者检查您是否正在访问 msgData 的正确元素。

关于bash 语法错误 : invalid arithmetic operator with token "@mail.com",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17526452/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com