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下的用戶總數。顯示結果形如:
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章