Linux运维第7天:Linux下sed工具及shell编程

sed基本用法:
    sed:stream editor
    行编辑器(全屏编辑器)
    
sed:模式空间
默认不编辑原文件,仅对模式空间中的数据做处理,处理结束后将模式空间打印到屏幕


sed [options] 'AddressCommand' file ...
    
    -n:静默模式,不再显示模式空间的内容
    -i:直接编辑原文件
    -e:同时执行多个脚本
    -f filename:脚本从文件中读取
    -r:支持扩展正则表达式
    
    Address:
        1.startline,endline : 1,200
            $倒数第一行
        2./REGEXP/
        3./PATTERN1/,/PATTERN2/:从第一个模式匹配到的行开始,至第二个模式匹配的行结束
        4.LineNumber:指定行
        5.startline,+N :总计n+1行
    
    Command:
        d:删除匹配的行
        p:显示符合条件的行
        a \"string":在后面添加 ,可以用\n换行
        i \"string":在前面添加
        r file:将指定的文件内容添加到后面
        w file:将符合条件的行保存到指定文件
        s/pattern/string/:替换,默认只替换每行中第一次匹配
            g:全局替换
            i:忽略大小写
            s///:可以使用其他如 s### s@@@
            &:引用匹配到的内容s#l..e#&r#ge  s#\(l..e\)#\1r#g


sed练习:
    1.删除/etc/grub.conf文件中行首的空白符;
    sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
    2.替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
    sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
    3.删除/etc/inittab文件中的空白行;
    sed '/^$/d' /etc/inittab
    4.删除/etc/inittab文件中开头的#号; 
    sed 's@^#@@g' /etc/inittab
    5.删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
    sed -r 's@^#[[:space:]]+@@g' /etc/inittab
    6.删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
    sed -r 's@^[[:space:]]+#@@g' /etc/inittab
    7.取出一个文件路径的目录名称;
    echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'  
    基名:
    echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'  


    #abc
    # hello world
       # hi world
       
练习:
传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位精度。形如:
./calc.sh 5 / 2


练习:
传递3个参数给脚本,参数均为用户名。将此些用户的帐号信息提取出来后放置于/tmp/testusers.txt文件中,并要求每一行行首有行号。
    


写一个脚本:
判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司;




写一个脚本:
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。
MAX=0
MAX -eq $1
MAX=$1
MAX -lt $2
MAX=$2


字符串测试:
    ==:
    !=:
    >
    <
    -n string:是否为不空
    -z string:是否为空
    
echo "scale=2;111/22;" | bc 


bc <<<"scale=2;111/22;"




循环:
    for
    while
    until
    
    for var in list
    do
        ...
    done
    
    生成列表
    {1..100}
    `seq [start] [step] end`
    
declare -i sum=0:整型
declare -x sum:全局变量


i++
i--
++i
--i
-=
+=
*=
/=
%=


组合测试条件
    -a: and
    -o: or 
    !: not 
___   _  _ 
A∩B = A∪B 
____   _ _ 
A∪B = A∩B


写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:  
    Hello, root, your shell: /bin/bash
3、统计一共有多少个用户


写一个脚本:
1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;


扩展:
接受一个参数:
add: 添加用户user1..user10
del: 删除用户user1..user10
其它:退出
adminusers user1,user2,user3,hello,hi






写一个脚本:
计算100以内所有能被3整除的正整数的和;
取模,取余:%
3%2=1
100%55=45


写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;




写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值