用于提取部分主机名的unix命令

pu3pd22g  于 2022-11-23  发布在  Unix
关注(0)|答案(8)|浏览(188)

我想在一个shell脚本中从UNIX中的testsrv1.main.corp.loc.domain.com中提取此主机名testsrv1的第一部分。
我可以使用什么命令?它可以是第一个句点.之前的任何命令

sqserrrh

sqserrrh1#

您是否在shell变量中包含服务器名称?您是否使用类似sh的shell?如果是,

${SERVERNAME%%.*}

我会做你想做的事。

2skhul33

2skhul332#

您可以使用cut

echo "testsrv1.main.corp.loc.domain.com" | cut -d"." -f1
zengzsys

zengzsys3#

要在pilcrow的答案上进行构建,不需要新变量,只需使用内置的$HOSTANME。

echo $HOSTNAME-->my.server.domain
echo ${HOSTNAME%%.*}-->my

在两个完全不同的Linux上测试。

***2.6.18-371.4.1.el5,GNU bash,版本3.2.25(1)-发行版(i386-redhat-linux-gnu)**3.4.76-65.111.amzn1.x86_64,GNU bash,版本4.1.2(1)-发行版(x86_64-redhat-linux-gnu)

ffscu2ro

ffscu2ro4#

尝试使用-s选项:主机名-s

jdzmm42g

jdzmm42g5#

我使用命令cutawksed或 *bash变量 *

操作

通过切割

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | cut -d. -f1
testsrv1
[flying@lempstacker ~]$

通过awk

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | awk -v FS='.' '{print $1}'
testsrv1
[flying@lempstacker ~]$

通过sed

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | sed -r 's@([^.]*).(.*)@\1@g'
testsrv1
[flying@lempstacker ~]$

通过Bash变量

[flying@lempstacker ~]$ hostName='testsrv1.main.corp.loc.domain.com'
[flying@lempstacker ~]$ echo ${hostName%%.*}
testsrv1
[flying@lempstacker ~]$
oknwwptz

oknwwptz6#

您可以使用“uname -n”只获取主机名。

r1zhe5dt

r1zhe5dt7#

您可以使用IFS来分割文本,对于域名,我们可以使用点/句点字符。

#!/usr/bin/env sh

shorthost() {
  # Set IFS to dot, so that we can split $@ on dots instead of spaces.
  local IFS='.'

  # Break up arguments passed to shorthost so that each domain zone is
  # a new index in an array.
  zones=($@)

  # Echo out our first zone
  echo ${zones[0]}
}

如果这是在你的脚本中,那么,例如,当你运行shorthost test.example.com时,你会得到test。你可以调整它来适应你的用例,但是我认为知道如何将区域分解成数组是这里最重要的事情。
我想提供这个解决方案,因为我觉得生成另一个进程是多余的,因为你可以在你的shell中用IFS轻松地完成它。需要注意的一件事是,一些用户会推荐做像hostname -s这样的事情,但这在BSD用户区不起作用。例如,MacOS用户没有-s标志,我不认为。

5sxhfpxr

5sxhfpxr8#

假设变量$HOSTNAME存在,那么尝试echo ${HOSTNAME%%.*}来获取全限定主机名的最顶部。希望它能有所帮助。
如果您感兴趣,可以参考下面引用的REHL7主机上的部分/etc/bashrc

if [ -e /etc/sysconfig/bash-prompt-screen ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
      else
          PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;; ... ```

相关问题