删除部分$(主机名)和#x27;)用bash脚本?
我正在运行一个脚本,用服务器主机名自动更新数据库中的字段删除部分$(主机名)和#x27;)用bash脚本?,bash,Bash,我正在运行一个脚本,用服务器主机名自动更新数据库中的字段 updatevar="UPDATE email_lists SET owneremail = REPLACE(owneremail, 'replacethis321', '$(hostname)');" 但是,主机名是“xyz.com”;我如何使其仅为“xyz”?脚本需要删除“.com”部分。这在多台服务器上使用,因此我不能仅将其设置为xyz,而不是直接使用$(主机名),将其分配给shell变量,以便您可以在扩展时: hostname=
updatevar="UPDATE email_lists SET owneremail = REPLACE(owneremail, 'replacethis321', '$(hostname)');"
但是,主机名是“xyz.com
”;我如何使其仅为“xyz
”?脚本需要删除“.com
”部分。这在多台服务器上使用,因此我不能仅将其设置为xyz
,而不是直接使用$(主机名)
,将其分配给shell变量,以便您可以在扩展时:
hostname=$(hostname)
updatevar="... ${hostname%%.*} ..."
使用%%.*
会修剪第一个点后的所有内容。如果只想删除后缀.com
(但不要使用.org
,.net
等),则可以使用${hostname%.com}
或者,如果您的操作系统支持,请使用$(主机名)
,而不是$(主机名-s)
;这是“短”形式,在第一个点处截断
这就是说,使用字符串替换来形成SQL表达式是一种糟糕的形式(而且由于bash通常不会为您提供在运行SQL时使用绑定变量的方法,因此如果您真正想正确地完成这项工作,通常需要/适合使用不同的语言)。即使是Wooledge bash指南。也不要直接使用
$(主机名)
将其分配给shell变量,以便在展开时:
hostname=$(hostname)
updatevar="... ${hostname%%.*} ..."
使用%%.*
会修剪第一个点后的所有内容。如果只想删除后缀.com
(但不要使用.org
,.net
等),则可以使用${hostname%.com}
或者,如果您的操作系统支持,请使用$(主机名)
,而不是$(主机名-s)
;这是“短”形式,在第一个点处截断
这就是说,使用字符串替换来形成SQL表达式是一种糟糕的形式(而且由于bash通常不会为您提供在运行SQL时使用绑定变量的方法,因此如果您真正想正确地完成这项工作,通常需要/适合使用不同的语言)。甚至Wooledge bash指南。或者,您可以通过管道连接到
awk
,而不是在单独的变量中获取主机名
$(hostname | awk -F "." '{print $1}')
或者,您可以通过管道连接到awk
,而不是在单独的变量中获取hostname
$(hostname | awk -F "." '{print $1}')