Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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
用于提取部分主机名的unix命令_Unix - Fatal编程技术网

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

用于提取部分主机名的unix命令,unix,Unix,我想提取这个主机名的第一部分testsrv1 来自UNIX中的testsrv1.main.corp.loc.domain.com,在shell脚本中 我可以使用什么命令?它可能是第一个句点之前的任何内容,您可以使用: 在shell变量中是否有服务器名称?您使用的是类似于sh的shell吗?如果是, ${SERVERNAME%%.*} 将执行您想要的操作。要基于pilcrow的答案,不需要新变量,只需使用内置的$HOSTANME即可 echo $HOSTNAME-->my.server.d

我想提取这个主机名的第一部分
testsrv1
来自UNIX中的testsrv1.main.corp.loc.domain.com,在shell脚本中

我可以使用什么命令?它可能是第一个句点之前的任何内容,您可以使用:


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

${SERVERNAME%%.*}

将执行您想要的操作。

要基于pilcrow的答案,不需要新变量,只需使用内置的$HOSTANME即可

echo $HOSTNAME-->my.server.domain
echo ${HOSTNAME%%.*}-->my
在两个完全不同的Linux上测试

2.6.18-371.4.1.el5,GNUBash,版本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)尝试-s开关:
主机名-s

我使用命令
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 ~]$

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

您可以使用IFS按您想要的任何标记分割文本。对于域名,我们可以使用点/句点字符

#/副秘书长/垃圾箱/环境卫生
shorthost(){
#将IFS设置为点,这样我们就可以在点而不是空格上拆分$。
本地IFS='。'
#分解传递给shorthost的参数,以便每个域区域
#数组中的新索引。
分区=($@)
#呼应我们的第一个区域
echo${zones[0]}
}
例如,如果这在脚本中,那么当您运行
shorthost test.example.com
时,您将得到
test
。您可以根据您的用例调整它,但我认为,知道如何将区域分解到阵列中是一件大事


我想提供这个解决方案,因为我觉得如果您可以使用
IFS
在shell中轻松、完全地完成另一个进程,那么生成另一个进程就太麻烦了。需要注意的一点是,有些用户会建议执行类似于
hostname-s
的操作,但这在BSD用户区不起作用。例如,MacOS用户没有
-s
标志,我不认为。

正是我想要的。谢谢完美的在我看来,这似乎比仅仅基于
的删除要干净得多。这是假设问题是关于运行shell的服务器的主机名。如果是的话,那么这将是正确的-并且可能对遇到此问题/答案的一些用户有所帮助。但是,正如被问到的,这个答案实际上是错误的。在macOS下,它是主机。有时,作为IT人员,我们必须解释人们的要求和他们实际需要的。我很高兴有几个人觉得我的回答很有帮助。unix的好处在于,总是有几种方法可以做一些事情——没有错误——但有些方法比其他方法更漂亮。这使得我们假设正在解析的主机字符串总是针对代码正在执行的主机。由于OP没有指定,OP可能希望能够对任何FQDN字符串执行此操作,因此您的答案不适用。这并不是在shell脚本中执行此操作,而是要求
cut
执行此操作。
[flying@lempstacker ~]$ hostName='testsrv1.main.corp.loc.domain.com'
[flying@lempstacker ~]$ echo ${hostName%%.*}
testsrv1
[flying@lempstacker ~]$