这是我第一次使用真正的 bash 脚本,我在扩展和引用方面遇到了很大的麻烦。
如果给定参数-t,我正在编写一个测试ssh连接和一些远程mysql命令的脚本,如果给定参数-r,则在真正的远程服务器上使用它们。我想将 ssh 和 mysql 命令的选项存储到变量中,因此当给出 -r 或 -t 时,它使用相同的例程。
长话短说,脚本看起来或多或少是这样的:
sql="SELECT id FROM user WHERE (email LIKE '%a@b.com' OR email LIKE '%c@d.com');"
case "$1" in
-t )
ssh_opts=(localhost -i ~/.ssh/id_rsa)
mysql_opts=(-u root --password=password test);;
-r )
ssh_opts=("-oCheckHostIP no" "-oCompression yes" "-oProtocol 2" "-oProxyCommand connect -4 -S localhost:9050 $(tor-resolve remoteip localhost:9050) 22" remoteip -i ~/.ssh/id_rsa -l httpd)
mysql_opts=('-h mysqlserver' '-P 3306' '-u user' '--password=password' database) -t );;
esac
read -a ids < <(ssh "${ssh_opts[@]}" \"mysql "${mysql_opts[@]" --disable-column-names -B -e \"$'${sql}'\""\")
csv_ids=$(IFS=,; echo "${ids[*]}")
正如您可能已经注意到的那样,我此时非常迷茫,而且我觉得这变得太复杂了。任何人都可以分享一些关于如何正确执行此操作的提示吗?
谢谢