我想提取此主机名testsrv1
的第一部分
来自UNIX中的testsrv1.main.corp.loc.domain.com
,在shell脚本中。
我可以使用什么命令?这将是第一个时期.
答案 0 :(得分:22)
shell变量中是否有服务器名称?您使用的是sh
- shell吗?如果是的话,
${SERVERNAME%%.*}
会做你想做的事。
答案 1 :(得分:16)
您可以使用cut
:
echo "testsrv1.main.corp.loc.domain.com" | cut -d"." -f1
答案 2 :(得分:16)
建立在pilcrow的答案之上,不需要新的变量,只需使用内置的$ HOSTANME。
echo $HOSTNAME-->my.server.domain
echo ${HOSTNAME%%.*}-->my
在两个相当不同的Linux上进行测试。
2.6.18-371.4.1.el5,GNU bash,版本3.2.25(1)-release(i386-redhat-linux-gnu) 3.4.76-65.111.amzn1.x86_64,GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu)
答案 3 :(得分:12)
尝试使用-s开关: 主机名-s
答案 4 :(得分:4)
我使用命令cut
,awk
,sed
或 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 ~]$
答案 5 :(得分:1)
您可以使用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]}
}
例如,如果这在您的脚本中,则在运行test
时会得到shorthost test.example.com
。您可以调整它以适合您的用例,但是我认为,知道如何将区域划分为数组是一件大事。
我想提供此解决方案,因为当您可以使用IFS
在shell中轻松而完全地完成另一个进程时,我觉得生成另一个进程是过大的。需要注意的一件事是,某些用户会建议您进行类似hostname -s
之类的操作,但这在BSD用户领域不起作用。例如,我认为MacOS用户没有-s
标志。
答案 6 :(得分:0)
您可以使用" uname -n"只获取主机名。