Linux中腳本的使用方法


Linux中腳本的使用方法

一、前言

  關於Linux中的腳本的用法,一直沒有時間去好好地總結,正好今天下雨,就好好的整理一下思路吧,其實精通了一門語言,比如C語言,學習其他語言需要的成本是非常少的,同樣的腳本作為一種比較簡易的語言,只要知道了語法,我們在通過幾個例子好好的理解和掌握一下常規的使用,這樣就等於是入門了,之后要想精深的話,其實更應該學習一下Linux中的命令,比如三劍客、文件操作的命令、進程管理的命令、重定向、管道等,這樣我們也算是能夠登堂入室了,不管是什么語言,最重要的是使用,不用來使用的語言,學習是毫無意義的,過不了多長時間就會忘記的。

二、Linux腳本的使用

  2.1、腳本的運行

   腳本可以很簡單,其實就是將Linux中的命令配上一定的語法去展現出來,下面我們看一個最簡單的腳本,因為筆者是在windows中操作的,安裝的Git里面就自帶有Linux腳本的運行環境(MinGW64),其實和Linux里面是一樣的,所以大家注意區分即可。

name='zyr' echo 'hello,zyr'

    (1)bash/sh  腳本名.sh  
      其中sh是bash這個程序的軟連接,需要找到bash再執行,因此執行的要稍微慢一點,當腳本文件本身沒有可執行權限時常使用的方法,使用ll命令可以看到文件權限屬性x位為-號;或者腳本文件開頭沒有指定解釋器時需要使用的方法,將重新啟動一個子shell(進程)來執行命令。從運行也可以看出來,這個$name根本就不是我們設置的,只是這個系統中已經設置的,說明是重新啟動了一個shell(子進程)來完成的,shell腳本執行完后子shell環境隨即關閉,然后又回到父shell中。這樣也好理解,因為如果凡事都需要shell自身來完成的話,有可能就阻塞了后續的執行了,這是一種折中的方法。


    (2)path/腳本名.sh  
     如果是在當前文件夾下,需要使用 ./腳本名.sh 。使用這種方式需要腳本有執行權限,具體方法為:chmod a+x script-name。然后通過執行腳本絕對路徑或者相對路徑就可以執行腳本了。在生產環境中,運維人員由於忘記為該腳本設置可執行權限,然后直接使用,導致出錯,將重新啟動一個子shell(進程)來執行命令。因此,推薦第一種 bash script-name。出乎意料的,我們在沒有執行權限的時候竟然運行成功了,這說明了什么,只能說明我們使用的這個MinGw64權限太大了。在Linux環境中就需要修改權限了。同樣的也是重新啟動了一個子進程。


    (3)source script-name或者 . script-name
     source或者“.”命令的功能是:讀入腳本並執行腳本,即在當前Shell中執行source或“.”加載並執行的相關腳本文件的命令及語句,而不是產生一個子Shell來執行文件中的命令。可以看到我們使用這種命令實現了在本shell中執行該腳本的功能,正確的輸出了name。

    2.2、腳本規范的寫法

    在上面我們使用的腳本是不規范的,因為我們沒有在開頭描寫我們要使用什么解釋器來解釋和執行,因此在正規的場景之中,我們需要寫上這些信息,並且使用第一種方式來執行。一個規范的Shell腳本在第一行會指出由哪個程序(解釋器)來執行腳本中的內容,這一行內容在Linux bash的編程一般為:#!/bin/bash或#!/bin/sh 。
   (1)在Shell中如果一行的第一個字母是#,則是注釋,但是寫在第一行,則不是腳本注釋行,如果寫在某個命令之后,則變成注釋行。
   (2)sh為bash的軟鏈接,大多數情況下,腳本的開頭使用“#!/bin/bash”和“#!/bin/sh”是沒有區別的,但更規范的寫法是在腳本的開頭使用“#!/bin/bash”。

#!/bin/bash name='zyr' #定義變量 echo 'hello,zyr'  #輸出字符串

 

   2.3、腳本的語法

   注意事項:

   A1、當變量名被其他字符串混淆的時候,需要加{}

 

   A2、對變量賦值的時候,在賦值號‘=’的左右不要留下空格

 

    A3、在使用echo輸出的時候,需要使用雙引號""才能夠將變量轉換成數值輸出出去,不然將會按照字符串處理。單引號更嚴格一些,可以防止任何變量擴展。雙引號可以防止通配符擴展但允許變量擴展。

   2.3.1、分支(判斷)語句的用法

   比如我們下面接收用戶輸入的參數,然后將這些參數顯示出來並且對系統變量進行判斷的腳本:

 1 #!/bin/sh
 2 
 3 
 4 #提示“請輸入姓名”並等待30秒,把用戶的輸入保存入變量name中  5 read -t 30 -p "請輸入用戶名稱:" name  6 #echo -e 處理特殊字符,如換行  7 echo -e "\n"
 8 echo "用戶名為:$name"
 9 #提示“請輸入密碼”並等待30秒,把用戶的輸入保存入變量age中,輸入內容隱藏 10 read -t 30 -s -p "請輸入用戶密碼:" pw 11 echo -e "\n"
12 echo "用戶密碼為:$pw"
13 #提示“請輸入性別”並等待30秒,把用戶的輸入保存入變量sex中,只接受一個字符輸入 14 read -t 30 -n 1 -p "請輸入用戶性別:" sex 15 echo -e "\n"
16 echo "性別為$sex"
17 
18 
19 #注意if的空格以及[]里面的空格 20 if [ "$SHELL" = "/bin/bash" ];then
21    echo "SHELL is : $SHELL"
22 else 
23    echo "login shell is $SHELL"
24 fi

   可以看到根據腳本的不同命令,shell能夠正確的執行並且顯示相應的結果,同樣的,這里要說一下if語句,在編寫shell的時候,如果是在windows里面,我們最好使用sublime來編輯,這樣可以很容易的發現出現的錯誤,比如說if語句,如果不注意空格,那么將會出錯,在sublime中是能夠看到提示的,如果是在Linux之中,我們就使用vim或者gedit這些都能智能提示的。

 

  比如說下面的就是錯誤的,必須有空格才能識別完整,好的編輯器能夠事半功倍:

   當然if語句也有其他的寫法,比如使用&&和||來表示的,根據我們的需要,再一點點的掌握。

   2.3.2、循環語句的用法

   接下來我們看一下while循環

 1 #!/bin/bash
 2 
 3 fileName=zyr.secret
 4 count=`cat $fileName | wc -l`
 5 #下面是一個管道,下面循環讀文件中的每一行
 6 cat $fileName |
 7 while read line
 8 do
 9     user=`echo $line|awk -F ':' '{print $1}'`
10     #代表以 :分段$1就是取第1段
11     uid=`echo $line|awk -F ':' '{print $3}'`
12     echo "hello, $user Your UID is $uid"
13 done
14 echo "====User_count:$count===="
15 #前面求得的用戶數
zyr:12:pw23
lsx:34:pw123
default:134:pw223

    當然也可以使用for語句,比如下面的語句是創建文件夾,並且在文件夾里循環創建文件。

#!/bin/sh cd /d/LinuxScript mkdir shell_make cd shell_make for ((i=0; i<20; i++)); do
 touch test_zyr_$i.txt done

   掌握了順序、分支、循環語句,在任何一個語言之中,我們都能夠游刃有余了,這是因為程序最基本的三個元素就是這些語句了,只要我們多加熟悉,掌握其中的精妙之處,注意標點符號、空格、特殊字符的用法,再加上Linux中的一些基本的命令,我們就能很好的使用腳本來完成我們想要做的工作了。

   2.4、Linux之中命令的一些基本技巧

     使用curl抓取網頁:

curl www.baidu.com

    抓取並保存文件:

curl -o zyr.baidu www.baidu.com

#!/bin/bash response=$(curl www.baidu.com) echo $response

 三、總結

   其實Linux腳本很容易學習,最重要的是多練習,並且有參考資料,可以及時去查閱,總體來說,使用Linux腳本的前提就是要掌握好Linux的命令,特別是那些常用的命令,之后將自己任務中常用的操作設計成腳本,然后使用起來就很方便了。當然還有很多東西都沒有講到,比如case語句,一些基本的符號表示的含義等等,但是這些在使用的時候還是很常用的,我們需要經常練習才行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM