2014-07-16 1 views
1
root=/dev/sdb1 rootfstype=ext2 rootdelay=10 rw console=ttyS0,115200 ... hostname= 

위 내용은/proc/cmdline에 있습니다. "hostname ="다음에 값이 있는지 판단하고 싶습니다.을 사용하여/proc/cmdline의 호스트 이름에 값이 지정되었는지 확인하십시오.

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 =? *"은 내 expection으로 작동하지 않습니다.

예상 결과는 스크립트에 의해 호스트 이름 다음에 값이 있는지 여부를 판단 할 수 있다는 것입니다. 있다면/etc/hostname과 아무런 관계가 없습니다. 그렇지 않으면/etc/hostname에 값을 줄 것입니다.

PS : 나는 부팅의 단계에서 호스트 이름에 값을 제공 할 수 있습니다 :

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

답변

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 
+0

가 대단히 감사합니다! 그것은 작동합니다! 나는이 일에 대해 약 일주일을 보냈다. – tank

+0

안녕 환영합니다 :) – konsolebox

+0

안녕하세요. 나는 다른 질문을 할 필요가있다. 네가 나를 도울 수 있기를 바랍니다. hostname = 뒤에 값을 가져 오려면 어떻게해야합니까? 예 : hostname = tank, "tank"값을 얻고 싶습니다. – tank

관련 문제