在bash脚本中删除$(hostname)')的一部分?

时间:2014-11-26 03:03:00

标签: bash

我正在运行一个脚本,用服务器主机名

自动更新数据库中的字段
updatevar="UPDATE email_lists SET owneremail = REPLACE(owneremail, 'replacethis321', '$(hostname)');"

但是,主机名是“xyz.com”;我怎么才能让它只是“xyz”?该脚本需要删除“.com”部分。这用于多个服务器,因此我不能将其设置为xyz

2 个答案:

答案 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}')