用于获取 mysql 用户授权详细信息的 shell 脚本

用于获取 mysql 用户授权详细信息的 shell 脚本

我正在尝试获取 mysql 用户授权详细信息并将其回显到文件

哈里=mysql -sN -e "show grants for mysqladm";

回显$shari

GRANT ALL PRIVILEGES ON *prod_server_list.txt stage_server_list.txt user_grants1.txt user_grants.txt user_list_temp1.txt user_list_temp.txt* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*##############' WITH GRANT OPTION GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%' GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION

正在获取目录中的 .txt 文件名

实际结果必须如下

show grants;
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for mysqladm@%                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*#############################' WITH GRANT OPTION |
| GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%'                                                                       |
| GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION                                                                           |
+------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

*.*正在被 .txt 文件名替换

请给我建议。

答案1

您需要引用您回显的内容,否则 echo 会用它在目录中找到的与模式匹配的内容来解释通配符。这称为通配符,可以禁用。

box:[~/tmp/test]$ touch file.txt other.txt
box:[~/tmp/test]$ foo='*.txt'
box:[~/tmp/test]$ echo $foo
file.txt other.txt
nox:[~/tmp/test]$ echo '$foo'
$foo
box:[~/tmp/test]$ echo "$foo"
*.txt
box:[~/tmp/test]$ set -f 
box:[~/tmp/test]$ echo $foo
*.txt
  • 在上面的例子中,您可以看到,不带引号的回显将导致通配符。
  • 带单引号的 Echo 将会逐字打印引号内的内容
  • 使用双引号的 echo 将打印变量内容,但不会打印全局变量
  • 或者,您可以使用 set 禁用通配符并自由地回显而不使用引号。

我建议根据需要使用双引号或单引号。

相关内容