programing

셸 스크립트에서 mariadb 암호의 특수 문자를 이스케이프하는 방법

elecom 2023. 7. 22. 09:23
반응형

셸 스크립트에서 mariadb 암호의 특수 문자를 이스케이프하는 방법

mariadb에 로그인하기 위해 셸 스크립트를 작성해야 합니다.셸 스크립트가 ini 파일에 특수 문자(공백, !@)가 포함된 암호 하나를 읽었습니다.

운영체제는 Ubuntu 18.04입니다.

ini 파일은 다음과 같습니다.

user=xxx-xxx-xxx
password=xxx /xxx /xx/ !\@

셸 스크립트는 다음과 같습니다.

#!/bin/bash
baseDir="$(cd "$(dirname "$0")" && pwd)"
iniPath="$baseDir/backup.ini"
echo "iniPath is $iniPath"

dbUser="$(grep 'user' $iniPath | cut -d '=' -f 2)"
echo "user is $dbUser"

dbPassword="$(grep 'password' $iniPath | cut -d '=' -f 2)"
echo "password is $dbPassword"

mysql -h localhost -u $dbUser -p'$dbPassword' 

명령줄에 mysql -h localhost -u xxxxxxx -p'xxx /xxx /xxx/!@' 명령을 입력하면 성공적으로 기록됩니다.그러나 셸 스크립트를 실행하면 항상 사용자에 대한 액세스가 거부됩니다.

제안할 것이 있습니까?감사해요.

사용해 보셨습니까: mysql -h localhost -u $dbUser -p'echo $dbPassword? (특수 문자 '는 esckey 왼쪽 상단 모서리 아래 키보드처럼 미국에 있으며, 뒤로 아포스트로피처럼 보입니다.) 암호가 있는 변수가 실행되기 전에 mysql 명령에 올바르게 "인쇄"되지 않은 것 같습니다.다른 방법으로는 -p"$dbPassword"를 사용하는 것이 좋습니다.

FWIW, 문제는 셸이 변수를 단일 따옴표로 둘러싸인 문자열로 보간하지 않는다는 것입니다.Honza가 지정한 대로 이중 따옴표가 작동합니다.

자세한 내용은 Bash의 단일 따옴표와 이중 따옴표의 차이를 참조하십시오.

언급URL : https://stackoverflow.com/questions/54282700/how-to-escape-special-characters-of-mariadb-password-in-shell-script

반응형