Linux系统下修改主机名脚本

文章由来:前段有问我如何修改主机名,今天又有人问。
何为sed:sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。

查看脚本文件nhN.sh(将以下内容保存为nhN.sh)
cat nhN.sh

#!/bin/bash
# 说明:修改Liunx系统主机名。在Centos、rh5试验过
# 使用方法:sh nhN.sh kinggoo ###意思是修改新主机名为kinggoo
# 缺点:在处理hosts文件的时候我觉得跟我想要的还是不太一样
# 知识点:sed的 t/T这东西挺不错,跟if语句一样效果
# $1:The new host name
oldname="`hostname`"
hostname "$1"
HOSTNAME=`hostname`
Network="/etc/sysconfig/network"
Hosts="/etc/hosts"
sed -r -i 's/^HOSTNAME='${oldname}'.*$/HOSTNAME='`hostname`'/g' ${Network}
sed -r -i 's/'${oldname}'/\ '`hostname`'\ /g;t;s/$/&\ '`hostname`'/g' ${Hosts}
echo -e "hostname:{`hostname`}\n
Setting up hosts file:\n{\n`cat ${Hosts}`\n}\n
Setting up network file:\n{\n`cat ${Network}`\n}\n
HOSTNAME:\n{\n`echo ${HOSTNAME}`\n}\n"
echo -e "完成,请查看以上修改信息是否正确\n\r如无误,请重启生效!"

参考资料:

t label 
if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 
T label 
错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

下载脚本:百度网盘

- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/sh_nhn.htm
发表评论?

7 条评论。

  1. 4.6 批量修改主机名
    备注:通用脚本,可以输入任何命令,expect免密码登录执行
    [root@kickstart expects]# cat expect_ssh_command.exp
    #!/usr/bin/expect
    #Author:yvonne
    #Date:2015-9-17 15:33:46。
    #E-mail:hxy_lanzhi@163.com
    #Function:Batch scp optimize_system.sh and hosts to other 17 servers.

    if { $argc != 2 } {
    send_user “usage: expect expect_ssh_command.exp host command\n”
    exit
    }

    #define var
    set host [lindex $argv 0]
    set command [lindex $argv 1]
    set password “123456”

    spawn ssh -p22 root@$host $command
    set timeout 60
    expect {
    -timeout 2
    “yes/no” {send “yes\r”;exp_continue}
    “*password” {send “$password\r”}
    timeout {puts “expect connect timeout,pls contact Yvonne.”; return}
    }
    expect eof

    exit -onexit {
    send_user “Yvonne say good bye to you!\n”
    }

    #script usage
    #expect expect_ssh_command.exp $host $command
    #example
    #ssh -p22 root@192.168.107.130 /bin/hostname test

    [root@kickstart expects]#

    执行命令参考:
    expect expect_ssh_command.exp 192.168.107.130 “/bin/hostname mysql-master”

    expect expect_ssh_command.exp 192.168.107.130 “sed -i ‘s/HOSTNAME=CentOS6/HOSTNAME=mysql-master/g’ /etc/sysconfig/network”

  2. sed -i ‘/httpd-vhosts/s/^#//’ httpd.conf
    以 httpd-vhosts 为关键字找到这行,并将前面的第一个字符删掉,即将#删掉。

  3. sed的一个简单用法:
    eg:在某一个文件中的一个aaa字段前后添加某些字段.
    在aaa前面添加字段:sed -ne ”s/aaa/&HELLO/p” test
    输出结果:aaaHELLO
    在aaa后面添加字段:sed -ne ”s/aaa/HELLO&/p” test
    输出结果:HELLOaaa
    在前后同时添加:sed -ne ”s/aaa/&HELLO&/p” test
    输出结果:aaaHELLOaaa
    后续补充:
    1.在某个字段前添加内容:
    sed -n ”s/apache/&HELLO/p” /etc/passwd
    输出结果:apacheHELLO:x:48:48:Apache:/var/www:/sbin/nologin
    2.删除文件第一个字符:
    sed ”s/^.//” /etc/passwd
    3.删除文件第二个字符:
    sed -r ”s/^(.)./1/” /etc/passwd
    或:sed ”s/^(.)./1/” /etc/passwd
    4.删除文件一个字符:
    sed ”s/.$//” /etc/passwd
    5.删除文件每行的倒数第二个字符
    sed ”s/.(.)$/1/” /etc/passwd
    或:sed -r ”s/.(.)$/1/” /etc/passwd
    6.删除文件每行的第二个单词
    sed -r ”s/^([a-Z] [^a-Z] )[a-Z] /1/” /etc/passwd
    7.删除文件每行的倒数第二个单词
    sed -r ”s/[a-Z] ([^a-Z] [a-Z] )$/1/” /etc/passwd
    8.删除一个文件中所有的数字
    sed ”s/[0-9]//g” test
    9.删除每行开头的所有空格
    sed ”s/^[ ]//g” test
    10.用制表符替换文件中出现的所有空格
    sed -r ”s/[ ] /t/g” test
    11.把所有大写字母用()括起来
    sed -r ”s/( [A-Z])/(1)/g” test
    12.隔行删除
    sed -n ”1~2p” test
    13.把文件从第1行到第3行复制到第4行后面
    sed -e ”1h” -e ”2,3H” -e ”4G” test

  4. sed -i ‘/type:/s/out,//;t;s/,out//’ 11.sh
    删除类是type:后面的的一些字符

发表评论