判断/ proc / cmdline中的主机名是否赋值

时间:2014-07-16 06:36:52

标签: grep hostname

root=/dev/sdb1 rootfstype=ext2 rootdelay=10 rw console=ttyS0,115200 ... hostname= 

以上内容在/ proc / cmdline中。我想判断“hostname =”之后是否有值。

e.g. root=/dev/sdb1 rootfstype=ext2 rootdelay=10 rw console=ttyS0,115200 ... hostname=tank

我的脚本如下。

#! /bin/bash
cat /proc/cmdline | grep  hostname=?*  #to judge if there is a value after hostname
if [ $? -eq 1 ]    #there is no value after hostname
    then
            echo "no hostname!"
            echo `cat /proc/cpuinfo | grep model | cut -d "," -f 2 | \
                  tr "[A-Z]" "[a-z]"` > /etc/hostname
    else
            echo "succeed!"
fi

但是,“cat / proc / cmdline | grep hostname =?*”不能用作我的预期。

预期的结果是我可以通过脚本判断主机名后面是否有值。如果有,我对/ etc / hostname什么都不做,否则,我会给/ etc / hostname一个值。

PS:我可以在启动阶段给主机名一个值:

setenv sdboot 'setenv bootargs root=/dev/sdb1 rootfstype=ext2 rootdelay=10 rw console=$consoledev,$baudrate $othbootargs hostname=$hostname;'

1 个答案:

答案 0 :(得分:0)

你可以:

egrep -q '\bhostname=\S+' /proc/cmdline

或者

grep -Eq '\bhostname=\S+' /proc/cmdline
grep -Pq '\bhostname=\S+' /proc/cmdline
  • egrepgrep -E使用扩展正则表达式。
  • grep -P使用Perl正则表达式,它也遵循格式。
  • 来自手册:符号\b匹配单词边缘的空字符串。
  • \S+确保为其指定了值,而不是空格。
  • -q选项告诉grep不生成任何输出,只在您需要退出代码时有用。

您的if区块也可以只是:

if egrep -q '\bhostname=\S+' /proc/cmdline; then
    echo 'succeed!'
else
    ...
fi