Bash Shell編程初學基礎篇之一

 Bash Shell編程初學基礎篇之一

說明 本文僅供初學Linux  Bash  shell學員參考學習,大神們如有興趣請批評指正?。?!

   相信對于很多Linux初學者或者僅僅是聽說Linux還沒有接觸過的同學會有一種神秘感或者不敢碰觸的感覺,今天就幫大家揭開它的神秘面紗,其實并沒有那么深不可測,只要你敢,你有決心去下工夫看完以下內容(是時候該逼自己下決心去做一些事情了?。。。?。廢話少說,浪費大家寶貴時間。

 概述 以下主要從Bash腳本的格式,變量,基本運算語法和實例來講解;每個實例都保證運行測試通過,然后截屏與大家分享;大家通過一些簡單的實例相信會很快上手,不要灰心,要相信自己;人和人之間的差距就在于用心去做。

基本內容:

  1. Shell腳本的基本格式:

    1. vim等編輯器新建一個bash.sh的文本文件,第一行以#!/bin/bash開頭即可。

    2. 一個規范的Shell的基本格式如下:

    #!/bin/bash
    # Description :test
    # Version 0.0.1
    # Author:zgq
    # Date :time

第一行是標準格式,我們在此處僅針對Bash來說,必須這樣寫,任何一門語言都有其規范;第二行Description簡單描述一下Shell的基本功能,第三行Version版本信息,第四行Author:作者信息,第五行Date:日期時間。除了第一行,其他以#開頭的行均為注釋信息,會被解釋器忽略。

希望大家在以后實現腳本功能之后將此信息補充完整,存在既有其將來被用到的一天。

實例:新建一個腳本/tmp/test.sh實現如下功能:

         1) 新建一個用戶magedu,

2)創建目錄/tmp/hellobash

3)復制/etc/rc.d/init.d/functions/tmp/hellobash

大家動手新建這個一個簡單的腳本,熟悉一下其基本的寫法規范。其實Shell腳本是一個過程式編程語言,把常用的Shell命令按順序羅列起來就是一個腳本。

bash1.png

       腳本寫完了,我們怎么去執行它呢?

首先用ll命令看一下此腳本是沒有執行權限的,用chmod  +x  /tmp/test.sh

賦予執行權限;然后用bash  –n  test.sh 此功能是語法測試,如果沒有任何結果則是最好的結果,bash  –x  test.sh 單步執行顯示其運行過程結果;

或者我們直接bash  test.sh 執行腳本。

  1. 變量概述:

    Bash變量名稱命令規則:

a)只能包含字母、數字和下劃線,并且不能以數字開頭;

b)不能與系統中環境變量重名
       c)
見名知意

Bash變量賦值和撤銷:

Bash屬于弱類型語言,任何變量無需事先聲明,可直接使用,值默認都是字符型;

   格式  變量=

                   例如: a=abc

                               declare  -i  varname=0

變量撤銷: unset varname

變量類別:

                            本地變量:作用域為整個bash進程

                            環境變量:作用域為當前shell進程及其子進程

                            局部變量:作用域只對當前代碼段有效

                            位置變量:$1,,,$n,${10} ,,,,,

                            特殊變量:

                                     $?:狀態返回值

                                     $#:傳遞給腳本參數的個數

                                     $*:顯示所有的參數

                                     $@:引用傳遞給腳本的所有參數

      實例:    寫一個腳本如下

bash2.png

執行結果解析:在腳本后面輸入了4個參數,那么$1的值為1,$2的值為2,$*的值為所有參數值,$#的值為參數的個數4個,$@的值是所有參數的值,$0的值為返回腳本的名稱,$?的值為此腳本執行狀態的返回值0,腳本執行成功的狀態返回值為0,如果腳本執行錯誤會返回1-255的值; 

 實例擴展:寫一個如下腳本運行

bash4.png

bash15.png

          結果分析:輸入四個參數,$1的返回值為1$2的返回值為3,$*的返回值為34,所有參數的值(可以理解為一共四個參數,兩個shift,所以把左邊兩個參數值釋放),$#返回參數的個數2個。由以上結果可以得出shift  [n]的作用是把左邊n個參數的值釋放掉;                  

                   Bash基本運算:

Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。expr 是一款表達式計算工具,使用它能完成表達式的求值操作

                   1、算術運算:                                

+

加法

`expr $a + $b` 結果為 30。

減法

`expr $a – $b` 結果為 10。

*

乘法

`expr $a \* $b` 結果為  200。

/

除法

`expr $b / $a` 結果為 2

%

取余

`expr $b % $a` 結果為 0。

=

賦值

a=$b 將把變量 b 的值賦給 a

==

相等。用于比較兩個數字,相同則返回 true。

[ $a == $b ] 返回 false。

!=

不相等。用于比較兩個數字,不相同則返回 true

[ $a != $b ] 返回 true。

乘號(*)前邊必須加反斜杠(\)才能實現乘法運算;   

實例:

bash5.png

執行結果如下:

bash6.png

              2、關系運算

關系運算符只支持數字,不支持字符串,除非字符串的值是數字。

運算符

說明

舉例

-eq

檢測兩個數是否相等,相等返回 true。

[ $a -eq $b ] 返回 true。

-ne

檢測兩個數是否相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt

檢測左邊的數是否大于右邊的,如果是,則返回 true。

[ $a -gt $b ] 返回 false。

-lt

檢測左邊的數是否小于右邊的,如果是,則返回 true。

[ $a -lt $b ] 返回 true。

-ge

檢測左邊的數是否大等于右邊的,如果是,則返回 true。

[ $a -ge $b ] 返回 false。

-le

檢測左邊的數是否小于等于右邊的,如果是,則返回 true。

[ $a -le $b ] 返回 true。

bash7.png

執行結果如下:

bash8.png

字符串運算:                                 

運算符

說明

舉例

=

檢測兩個字符串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=

檢測兩個字符串是否相等,不相等返回 true。

[ $a != $b ] 返回 true。

-z

檢測字符串長度是否為0,為0返回 true。

[ -z $a ] 返回 false

-n

檢測字符串長度是否為0,不為0返回 true

[ -n $a ] 返回 true。

str

檢測字符串是否為空,不為空返回 true。

[ $a ] 返回 true

bash9.png

執行結果如下:

bash10.png

布爾運算符

運算符

說明

舉例

!

非運算,表達式為 true 則返回 false,否則返回 true。

[ ! false ] 返回 true。

-o

或運算,有一個表達式為 true 則返回 true。

[ $a -lt 20 -o $b -gt 100 ] 返回 true

-a

與運算,兩個表達式都為 true 才返回 true。

[ $a -lt 20 -a $b -gt 100 ] 返回 false。

bash11.png

執行結果如下:

bash12.png

                            文件測試運算符列表:

操作符

說明

舉例

-b file

檢測文件是否是塊設備文件,如果是,則返回 true。

[ -b $file ] 返回 false。

-c file

檢測文件是否是字符設備文件,如果是,則返回 true。

[ -b $file ] 返回 false。

-d file

檢測文件是否是目錄,如果是,則返回 true。

[ -d $file ] 返回 false。

-f file

檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。

[ -f $file ] 返回 true。

-g file

檢測文件是否設置了 SGID 位,如果是,則返回 true。

[ -g $file ] 返回 false。

-k file

檢測文件是否設置了粘著位(Sticky Bit),如果是,則返回 true。

[ -k $file ] 返回 false。

-p file

檢測文件是否是具名管道,如果是,則返回 true。

[ -p $file ] 返回 false。

-u file

檢測文件是否設置了 SUID 位,如果是,則返回 true。

[ -u $file ] 返回 false。

-r file

檢測文件是否可讀,如果是,則返回 true。

[ -r $file ] 返回 true。

-w file

檢測文件是否可寫,如果是,則返回 true。

[ -w $file ] 返回 true。

-x file

檢測文件是否可執行,如果是,則返回 true。

[ -x $file ] 返回 true。

-s file

檢測文件是否為空(文件大小是否大于0),不為空返回 true。

[ -s $file ] 返回 true。

-e file

檢測文件(包括目錄)是否存在,如果是,則返回 true。

[ -e $file ] 返回 true。

bash13.png

執行結果如下:

bash14.png

好了,時間緊,就先說到這里,有不完整和補充的地方希望大家指正。接下來有時間在說Shell的基本語法格式條件語句:if,case,循環語句:for while,until.希望大家有好的意見和建議并批評指正!??!我們一點一滴的去慢慢穩扎穩打,相信有一天你會成為你想成為的人?。?!

 

原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/1974

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-03-28
下一篇 2015-03-30

相關推薦

  • DNS and BIND 介紹及安裝

    DNS DNS是什么 為什么要用DNS 域名 BIND DNS是什么 DNS:Domain Name System,域名系統DNS作為域名和IP地址相互映射的一個分布式數據庫,能夠讓用戶更方便的訪問互聯網。它的正向映射是吧一個主機和IP地址關聯起來,它的反向映射則是IP地址到主機名。DNS協議運行在UDP協議上,使用53端口。 為什么要用DNS 連接到互聯網…

    Linux干貨 2016-05-28
  • Linux的終端類型

    Linux的終端類型       終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備,linux終端大致有設備終端,物理終端、虛擬終端、圖形終端、串行終端、偽終端等。 一.設備終端   設備終端的是一些看的見摸得著的一些實物,比如鼠標、鍵盤、顯示器、打印機等之類的實物。 二.…

    Linux干貨 2016-10-14
  • N26-第五周

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@localhost test]# cat /etc/passwd | grep -E “^(root|fedora|user1)\>” |cut -d: -f  1,7 root:/bin/bash user1:/bin/bash …

    Linux干貨 2017-02-26
  • 軟件包管理(rpm,yum,源碼安裝)

    API:Application Programming Interface  ==>軟件開發接口     POSIX :Portable OS 程序源代碼 –> 預處理 –> 編譯 –> 匯編 –>鏈接   &n…

    Linux干貨 2016-08-24
  • LVS常見的類型實現方式

    前言  由于lvs的基礎知識已經在第一篇lvs中講解了,所以在這里只做實驗,包括lvs-nat,lvs-dr,以及基于Freiwall標記和實現會話綁定實驗。 一、lvs-nat:也是MASQERADING,簡稱為m(masquerading)    實驗圖:     地址規劃:     …

    Linux干貨 2015-06-29
  • linux文本處理三劍客—grep

      cat:concatenate 文本文件查看工具 cat [option] filename… -n:給顯示出來的文本行加上編號 -b:非空行編號 -V:顯示 ^ -E:顯示行結束符$ -T:顯示制表符 -A:顯示所有控制符-A=-VET -s:壓縮連續…

    系統運維 2016-08-05

評論列表(2條)

  • stanley
    stanley 2015-03-30 23:33

    有理論有實戰,不錯。 格式上稍亂了些,雖然了些調整,整體效果還不是特別理想。另: 如果加上標簽seo的效果會非常好

    • 古雨秋
      古雨秋 2015-04-01 21:43

      @stanley多謝指點,在word中寫的,然后粘貼到博客里面,表格的大小無法調整,后續繼續努力,請多指教!

欧美性久久久久