1. 程式人生 > >LinuxShell腳本從入門到比入門強一點點的坎坷之路

LinuxShell腳本從入門到比入門強一點點的坎坷之路

錯誤 文本處理 圖片 概念 c99 命令執行 常見 linu 輸出

腳本的簡單介紹


*此文寫給剛剛入門Linux學習腳本的小白,文中為方便理解專業詞用的不多,若要確切的系統的學習某些概念,還需專門學習,本文僅供參考


在沒接觸過腳本之前,腳本這個詞只在Windows中某些軟件出問題了,會提示”當前腳本運行出錯“之類的詞,當然了,作為一個只會用電腦打英雄聯盟和Linux只會基本命令的小白,此時此刻對腳本依舊沒什麽太大的概念,不過即使如此菜的摳腳,我依舊得用我這智商為負的腦子去死磕這個叫做腳本的東西。
是的沒錯!在Linux中,會敲命令就會寫腳本。運行腳本的是一個叫做“解釋器”的東西Linux中默認的解釋器是bashshell,還有很多解釋器比如Python。會寫腳本的話,不說別的,至少不用敲那麽多又臭又長的命令了,都丟進腳本文件,執行腳本文件就一切OK了,當然了,看到這篇帖子的各位仁兄應該也學過基本命令了比如最基本的ls , ifconfig ,vim文本編輯器, 以及grep ,egrep 等等基本的文本處理命令,很高興的告訴你,剛開始學腳本,這些就夠了 (大神路過此貼請輕噴蟹蟹)

學IT的同學用腿想都知道,每學一樣新語言都從”HelloWorld”開始的,這裏也一樣

helloworld入門

             #!bin/bash
             # This is first scriptof“hello world”
             echo “hello world”

#!/bin/bash 是腳本調用的解釋器名稱,(整個腳本除了第一行的#除外,其他行的#都為註釋,)
#!/ This is first script of "hello world" 是腳本註釋,就是這一行的內容不會執行
打開vim編輯器,照著上面的命令字符敲進去,保存退出並賦予剛剛編寫的腳本執行權限

    [root@centos7 ~]# chmod a+x helloworld.sh

當腳本有了執行權限,就可以運行了

    [root@centos7 ~]# ./helloworld.sh
    hello world
    [root@centos7 ~]# 

類似的,剛開始學習嘛,你可以把好多毫不相幹的命令都丟進腳本文件裏面,執行腳本文件的時候也會把你在腳本文件裏面寫的命令依次執行並顯示在終端,就像下圖這樣:

技術分享圖片

打開vim編輯器把上圖中的命令敲進去,然後給腳本文件一個執行權限如下圖:
技術分享圖片

執行腳本文件如下:

[root@centos7 ~]# ./test.sh

執行結果如下:
技術分享圖片

    不是很難對吧?
    太簡單?
    好吧,那就加點參數吧
    相信能看到這裏的各位同學也應該知道什麽是參數了,小弟在此就不再贅述了

帶參數的腳本

    先寫一個執行需要參數的腳本吧如下:

技術分享圖片

重點解釋的是$這個東西,不光是美元,還是在Shell腳本中很常見又很關鍵的一個字符

$1代表位置參數,可以解釋為執行腳本文件的同時在後面打一個參數,具體參數以腳本中要求的為準
$(XXX)這個格式為取變量值,圖中的意思則為取$(cat $1 |wc -l)的值並賦值給lines
echo是用來輸出信息的,大體上應該也能看懂吧,就是取$(XXX)的變量並賦值,然後輸出這個值

執行步驟和執行結果如下,註意執行腳本的同時後面的參數啊:
技術分享圖片
不用糾結$東西,學好了這東西有的是

參數過濾

上面講到了參數,不過很顯然,不是隨便寫一個參數就會有輸出結果的,比如我想找一個文件有多少行,我在執行腳本的時候後面跟一個IP地址肯定行,不懂的會問cat不是可以查看然後直接輸出嘛之類的,cat是用來查看文件的,後面跟的參數是個文件,不是你輸入什麽就能看到什麽的,有這個疑問的同學請轉彎回去補補基礎吧,不信我給你執行以下cat+IP你看看:

技術分享圖片
很明顯吧,好了不多說,具體看下參數怎麽過濾
grep,egrep ,以及cut ,tr等文本處理工具
就拿IP為例,我想測試一個IP是否可以ping通,前提是要判斷IP是否符合IP的條件,比如1192.18.0.256,很明顯,首先IP地址的每一位最多三位數,1192就不符合,其次每一位最大值為255,所以256也不符合,所以就需要先判斷輸入的IP是否符合條件,再執行ping操作,腳本內容如下:
技術分享圖片
寫完了,那就執行一下看看:
技術分享圖片

執行結果很容易理解,可這個腳本內容是不是看起來很復雜?別急,其實上述的所有內容都是一行,只是屏幕顯示為多行,很簡單的
$1為位置參數,在這裏就是要輸入的IP地址,
egrep -q 是靜默輸出,就是執行成功不會有任何提示結果,最長的那段是過濾IP是否符合要求,符合,則執行&&之後的語句,把輸入的IP扔給PING命令執行(-c1為只ping一個包,-w1為一秒鐘)&> /dev/null則為把輸出結果扔掉

具體邏輯關系看下圖就明白了:
技術分享圖片

if 在腳本中的運用

這個邏輯關系看著不難,但是腳本裏面寫成這個樣子著實不好看,很容易出錯,那就用點邏輯清晰的語句來寫吧,換一個例子:
例:給定腳本一個參數為普通文件,判斷是否為以 .sh結尾的普通文件,是則給其賦予執行權限(x),否則輸出“非用戶腳本文件”:

技術分享圖片
怎麽樣,感覺挺復雜,不過是不是看起來有條理,不像上一個腳本文件寫的那麽亂了?
仔細看,相同顏色的框是一個完整的邏輯語句, if裏面可以繼續用if,需要註意的是要保證語句的完整性,初次使用此類方式需要註意語法錯誤的同時,要留意不要忘掉類似“fi”這樣的結束語句

*每一個IF後面 [ ]裏面的關於test和grep等等為在腳本學習之前的內容,在此不再贅述

首先,灰色框是判斷文件是否存在,存在,則繼續執行紅色框;否則,直接輸出“文件不存在”腳本執行結束
執行紅色框判斷給定參數文件是否為普通文件,是,則繼續執行藍色框;否則直接退出,腳本執行結束
執行藍色框判斷是否為“.sh”結尾的文件,是,則為其添加執行權限,否,則輸出“非用戶腳本文件”,腳本執行結束


  • 心得

由於現階段關於邏輯判斷以及循環語句的學習有限,暫時只能寫出這麽多,不過前面基礎命令以及各個選項都能運用自如的話現在僅用IF寫出來的腳本也很不錯的,現階段的腳本都是對給定參數的處理以及基本輸出,沒有太多復雜的其他東西,基礎很重要!十分的重要!!別小看基礎命令什麽的,就最最基本的 ls命令選項就好幾十個,常用的那些都沒人保證全部都記得,所以還是要多復習多練,這樣寫腳本才能運用自如,否則,磕磕絆絆不說,選項記不住,命令功能不清楚,語法格式也不清楚,寫腳本一定舉步維艱,

    僅以此文,寫給在Linux學習道路上一路狂奔的小白們

LinuxShell腳本從入門到比入門強一點點的坎坷之路