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;'
答案 0 :(得分:0)
你可以:
egrep -q '\bhostname=\S+' /proc/cmdline
或者
grep -Eq '\bhostname=\S+' /proc/cmdline
grep -Pq '\bhostname=\S+' /proc/cmdline
egrep
或grep -E
使用扩展正则表达式。grep -P
使用Perl正则表达式,它也遵循格式。\b
匹配单词边缘的空字符串。 \S+
确保为其指定了值,而不是空格。-q
选项告诉grep
不生成任何输出,只在您需要退出代码时有用。您的if
区块也可以只是:
if egrep -q '\bhostname=\S+' /proc/cmdline; then
echo 'succeed!'
else
...
fi