나는 테이블과 필드의 이름을 변경하여 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: 4번부터 표시됨
답변1
명령이나 함수의 출력 값을 할당하려면 다음 구문을 사용하십시오.
x=$(ord "$car")
var=$(chr "$x")
(귀하가 겪고 있는 오류는 예를 들어 사용 중인 구문이 x=ord $car
다음을 수행하기 때문에 발생합니다. 변수에 x
문자열이 할당되고 "ord"
이후 x
명령의 컨텍스트에서 사용할 수 있습니다 $car
. 그러나 이는 명령이 아닙니다. 확장 $car
되므로 "s", "0" 등은 명령으로 인식되지 않습니다.