shell指令碼學習:循序漸進之初級awk語句,until迴圈,test語句

來源:互聯網
上載者:User

               awk起源:awk語句是70年代由BELL實驗室三個研究人員開發出來的一套語言,awk的名字就是這三位研究人員的名字頭字母。但是最初的awk並不是面向使用者使用,而是商業化,面向個人使用,但awk依然是一套強大的語言。

         90年代,GNU在awk基礎上開發出完全開源版本,功能更加強大強大,甚至可以通過ftp來網路應用

         awk語句是一種非常強大的語句,它的功能異常強大,甚至可以當作一門程式設計語言來使用,在以後會經常用到awk語句來處理字元。在shell指令碼裡,awk可以說是核心之一,因為剛接觸awk語句,所以,先寫下這篇初級awk語句的學習感受。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

awk使用格式:

awk [option] 'pattern {action}'
     pattern :  /regexp/       //Regex
                   exp                 //運算式
                   BEGIN
                   END
      action : print               //對文本切片,$1,....,$N   
                     FS:         //讀入檔案是以什麼作為分割符,預設空格符
                     RS:      //                                 分行符號,  /n
                     OFS      //輸出的段分隔字元
                     ORS      //輸出的行一行間隔符
                     NF         //一個行裡切開有多少個斷
                     NR         //行號當前在第幾個行
awk -F:   //可以指定輸入的時候分割符是“:”,也可以指定別的   

舉兩個例子來顯示awk語句的強大:
1.顯示當前系統上所有其VSZ段的值大於4000的進程的進程名字、進程號和VSZ值的大小;

ps aux |awk '$5>4000 {print $2 "\t" $5 "\t" $11}' |grep -v "PID"   

##將ps 進程資訊交給awk命令來處理,預設以空格來作為分隔字元,如果第5個欄位的值大於4000,就顯示第2 , 3,5個欄位,並且交給grep來處理,列印出沒有"PID"的項。

看到了嗎,這條awk語句的pattern項,為一個運算式:$5>4000, 在awk裡,pttern可是是Regex,運算式,用好這個條件,可以快速匹配出想要得到的文本,而不需要用grep或##者sed去抓取命令。而後面的$2,$5指的是第2,5個欄位,\t是定位字元。

 

2.顯示linuxer1-linuxer20每個使用者名稱及對應的UID號碼和GID號碼

##做這個練習前需先建立使用者linuxer1-linuxer20

 grep "linuxer$I" $FILE | awk 'BEGIN{FS=":"}{print $1",UID:" $3",GID:"$4}'

#BEGIN的用法:BEGIN{} {}指,在後面的命令執行前,先準備好BEGIN{}裡的內容,即先執行BEGIN裡的內容,後執行action,而END則恰好相反

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

until迴圈:until迴圈和while迴圈有一定的區別如下:
until CONDITION ; do
    ...
    ...
done
#當CONDITION為假時,進行迴圈,直到為真,這樣就可以指定一個條件,如果符合這個條件則,一直迴圈下去,直到不符合這個條件為止。

 

寫一個指令碼:
查看redhat使用者是否登入了系統,如果登入了,就通知當前指令碼執行者“redhat is logged on.”;
否則,就睡眠5秒鐘後再次進行測試;直到其登入狀態止退出;
要求:使用until迴圈

#sleep 5 睡眠5秒

#wall " "  向所有人通告“ ”

#!/bin/bash#who | grep "redhat" &> /dev/null          //抓取當前登入使用者裡,是否有redhatWHO=$?                                                //上一條語句執行是否成功,成功WHO為0until [ $WHO -eq 0 ];do                          //除非變數WHO的值為0,否則一直執行迴圈體   sleep 5                                                    who | grep "redhat" &> /dev/null              WHO=$?                                        //再次測試,防止死迴圈done                                                       wall "redhat is logged on"

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

test語句

指令碼條件判斷
test express

test 語句重要用於程式執行流或者其他可以附加條件的語句,成為他們的 condition, 這樣豐富了指令碼的靈活度。

它的格式:
[ expression ]   //必須有空格,複製語法錯誤
[[ expression ]]

條件測試:

整數測試
-lt, [ $A -lt $B ]   //A是否小於B
-le  小於或等於
-gt  大於
-ge  大於或等於
-nq  等於
-ne  不等於

字串測試
==   //等號左右要有空格          'w' 字串用單引號,變數用“” == 兩邊有空格
!=
>
<
-z   //判斷一個字串是否為空白 空為真,不空位假     [ -z $A]
-n    //與-z相反

檔案測試
-e FILE  //判斷一個檔案是否存在
-f       //是否是普通檔案
-d       //是否是目錄
-h/-L    //判斷是否是符號連結檔案或軟串連
-r       //是否可讀  目前使用者
-w        可寫  對目前使用者
-x        執行   對目前使用者來講是否有可執行
-s       //存在且大小不為0
-O       //判斷指令碼的發起者是不是檔案的屬主
-G       //是不是有效屬組

 

例如上面例子裡的until [ $WHO -eq 0 ];  -eq來測試是否等於0

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.