我有一个bash脚本,我想用来从数据库中提取IP地址。我似乎无法获得1美元。
命令是:./ goto.sh 2010。
我希望它能够占据2010年并在数据库中搜索它。
goto.sh:
#!/bin/bash
ip=`mysql -Ns wksips -e 'SELECT IP FROM ips WHERE ID LIKE '%'''$1''';`
echo $ip
我有%符号,因为所有单位都以wks开头,例如wks2010。
我已尝试更改引号但在mysql中运行时仍然失败。
++ mysql -Ns wksips -e' SELECT IP FROM ips WHERE ID LIKE%$ 1' 第1行的错误1064(42000):SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以获得在'%$ 1'附近使用的正确语法。在第1行
感谢任何帮助。
答案 0 :(得分:2)
我会这样写:
ip=$(mysql -Ns wksips -e "SELECT IP FROM ips WHERE ID LIKE '%$1'")
在shell参数级别使用双引号,这允许在双引号字符串中扩展$1
之类的变量。
然后仅使用单引号来分隔SQL语法中的字符串文字。
我更喜欢$(...)
而不是back-ticks来替换shell中的命令。使用$(...)
非常棒,因为如果命令本身需要一些命令替换,您可以根据需要继续嵌套这些结构。使用反斜杠做同样的事情需要反斜杠,这会令人抓狂。