Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除部分$(主机名)和#x27;)用bash脚本?_Bash - Fatal编程技术网

删除部分$(主机名)和#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}')