我编写了这个脚本,通过更改表和字段的名称来编码/加密来自 sql 查询的数据(我使用的是 ASCII 字符代码)。
#! /bin/bash
chr() {
[ "$1" -lt 256 ] || return 1
printf "\\$(printf '%03o' "$1")"
}
ord() {
LC_CTYPE=C printf '%d' "'$1"
}
read -p "saisir votre requete: " req
printf "%s\n" "$req" > t1.txt
sed -e 's/[;,()'\'']/ /g;s/ */ /g' t1.txt > t.txt
while read line; do
for word in "${line[@]}"; do
if ! [[ "$word" =~ $(echo ^\($(paste -sd'|' ./req.txt)\)$) ]]; then
str=$word
for i in $(seq 1 ${#str}); do
car=$(echo $(echo $str | cut -c$i))
x=$(ord "$car")
let "x= (((x/2) * 3) + 1)"
var=$(chr "$x")
echo $str | sed "s/\$car/\$var/g"
done
sed -i -e "s/$word/$str/g" t1.txt
str=""
fi;
done
done < t1.txt
该文件req.txt
包含诸如选择、插入、更新等每个请求之类的单词。
我执行了脚本,但终端挂起并根据字符数显示每个单词:
Expl: from 显示了 4 次
答案1
如果您想要分配命令或函数的输出值,请使用以下语法:
x=$(ord "$car")
var=$(chr "$x")
(您遇到的错误是因为您使用的语法,例如x=ord $car
,将执行以下操作:变量x
将被分配字符串"ord"
,然后该变量x
可用于后续命令的环境$car
;但扩展的$car
不是命令,所以你会得到“s”、“0”等不被识别为命令的错误。)