You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中验证UPDATE或SELECT查询语句?

Shell脚本中验证UPDATE/SELECT查询语句的解决方案

我来帮你搞定这个SQL语句验证的问题!你需要确保语句的首个单词是update或select,对于UPDATE语句还要检查第二个单词是指定的table_name、第三个单词是set,下面给你两种实用的实现方式:

方法一:拆分语句为单词数组验证

这种方法直观易懂,适合需要灵活扩展验证规则的场景,比如后续要检查更多位置的单词:

#!/bin/bash

# 测试用的SQL语句,可以换成用户输入的变量
sql_query="update table_name set col_name = 1 where emp_id = '1234'"

# 将SQL语句按空格拆分成单词数组(自动忽略连续空格)
read -ra sql_words <<< "$sql_query"

# 开始验证逻辑
first_word="${sql_words[0],,}"  # 转成小写,兼容大小写输入
if [[ "$first_word" == "update" ]]; then
    # 验证UPDATE语句的规则
    if [[ "${sql_words[1]}" == "table_name" ]]; then
        if [[ "${sql_words[2],,}" == "set" ]]; then
            echo "✅ UPDATE语句验证通过!"
        else
            echo "❌ 错误:第三个单词必须是set"
        fi
    else
        echo "❌ 错误:第二个单词必须是table_name"
    fi
elif [[ "$first_word" == "select" ]]; then
    # 这里可以扩展SELECT语句的验证规则,比如检查第三个单词是from等
    echo "⚠️ SELECT语句的验证逻辑可以在这里补充(例如检查第二个单词为列名/星号,第三个为from)"
else
    echo "❌ 错误:语句首个单词必须是update或select"
fi

关键细节说明:

  • ${var,,}是Bash的扩展语法,用于把字符串转成小写,这样不管用户输入UPDATE还是update都能匹配
  • read -ra会把输入的字符串按空格(包括连续空格、制表符)拆分成数组,完美处理SQL语句中的空格分隔问题

方法二:用正则表达式匹配

如果你的验证规则比较固定,用正则会更简洁,还能直接匹配整个语句的格式:

#!/bin/bash

sql_query="update   table_name    set col_name = 1 where emp_id = '1234'"

# 正则匹配UPDATE语句:支持大小写、连续空格
update_pattern="^[Uu][Pp][Dd][Aa][Tt][Ee]\s+table_name\s+[Ss][Ee][Tt]"
select_pattern="^[Ss][Ee][Ll][Ee][Cc][Tt]"

if [[ "$sql_query" =~ $update_pattern ]]; then
    echo "✅ UPDATE语句验证通过!"
elif [[ "$sql_query" =~ $select_pattern ]]; then
    echo "⚠️ SELECT语句验证逻辑可扩展(例如添加后续的from、表名规则)"
else
    echo "❌ 错误:不符合要求!UPDATE语句需满足:首单词为update,第二个为table_name,第三个为set;SELECT语句首单词必须为select"
fi

关键细节说明:

  • ^表示匹配字符串的开头,确保验证的是语句的第一个单词
  • \s+匹配一个或多个空格,处理语句中可能存在的连续空格
  • [Uu]这种写法实现了不区分大小写的匹配,兼容不同的输入格式

你可以根据自己的实际需求选择其中一种方法,要是需要更复杂的验证(比如检查WHERE子句的格式),还可以在现有逻辑上继续扩展~

内容的提问来源于stack exchange,提问作者Jammu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:50:37