我正在运行一个脚本,用服务器主机名
自动更新数据库中的字段updatevar="UPDATE email_lists SET owneremail = REPLACE(owneremail, 'replacethis321', '$(hostname)');"
但是,主机名是“xyz.com
”;我怎么才能让它只是“xyz
”?该脚本需要删除“.com
”部分。这用于多个服务器,因此我不能将其设置为xyz
。
答案 0 :(得分:2)
不是直接使用$(hostname)
,而是将其分配给shell变量,以便在扩展时{@ 3}}:
hostname=$(hostname)
updatevar="... ${hostname%%.*} ..."
使用%%.*
修剪第一个点后的所有内容。如果您只想删除后缀${hostname%.com}
(但仅保留.com
,.org
等),则可以使用.net
。
或者,如果您的操作系统支持$(hostname)
,请使用$(hostname -s)
而不是{{1}};这是"短"形式,在第一个点处截断。
那就是说 - 使用字符串替换来形成SQL表达式是不好的形式(因为bash通常不会给你一种在运行SQL时使用绑定变量的方法,它通常是必要的/适当的使用如果你真的想要做正确的工作,那就是另一种语言)。甚至是Wooledge bash指南use PE expressions。
答案 1 :(得分:1)
或者,您可以转到awk
,而不是将hostname
放在单独的变量中。
$(hostname | awk -F "." '{print $1}')