Bash Shell編程初學基礎篇之一

 Bash Shell編程初學基礎篇之一

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

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

 概述 以下主要從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.希望大家有好的意見和建議并批評指正?。?!我們一點一滴的去慢慢穩扎穩打,相信有一天你會成為你想成為的人!?。?/span>

 

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

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-03-28 23:34
下一篇 2015-03-30 11:15

相關推薦

  • LVM邏輯卷管理器(Logical Volume Manager)

    邏輯卷管理器(Logical Volume Manager) 簡介      LVM的做法是將幾個物理的分區通過軟件組合成為一塊看起來是獨立的大磁盤(VG),然后將這塊大磁盤再分成可以使用的分區(LV),最終就能夠掛載使用了。內部通過PE來進行擴展或縮小。 PV(PhysicalVolume)物理卷 用fdisk命令調整系統標識…

    Linux干貨 2016-09-01
  • 第一次作業

    第一次作業 作業1 博客 作業2 echo -e "\033[49;31;4;5m*******\033[0m \n\033[49;32;4;5m ***** \033[0m \n\033[49;33;4;5m  ***  \033[0m \n\033[49;34;4;5m   *   \033[0m&quo…

    Linux干貨 2016-08-03
  • N28-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令:cp、mv、rm 1.1 cp命令 用法: cp [OPTIONS]…[-T] SOURCE DEST cp SRC DEST而言,SRC是文件時 如果目標不存在: 新建DEST,并將SRC中內容填充至DEST中 如果目標存在: 如果DEST是文件:將SRC中的內容覆蓋至DE…

    Linux干貨 2017-12-15
  • 加密·解密·PKI詳解及如何創建私有CA

    加密解密技術基礎: 安全的目標:   保密性:confidentiality 確保通信信息不被任何無關的人看到 完整性:integrity 實現通信雙方的報文不會產生信息丟失 數據完整性 系統完整性 可用性:availability 通信任何一方產生的信息應當對授權實體可用 攻擊類型:   威脅保密性的攻擊:竊聽、通信…

    2017-05-30
  • bash腳本編程class2

    bash腳本class2—循環語句的使用      一.三種循環語句以及其具體使用方法   我們知道,在shell腳本編程過程中,為了實現邏輯關系的運算,有三種執行命令的順序:順序執行,選擇執行,循環執行。通過if,case這類語句可以實現條件篩選后執行命令,這次課程中所學的主要知識點為循環語句的三種使用方式:for,…

    Linux干貨 2016-08-19
  • SSH端口轉發

    ? SSH 會自動加密和解密所有SSH 客戶端與服務端之間的網絡數據。但是,SSH 還能夠將其他TCP 端口的網絡數據通過SSH 鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling),這是因為SSH 為其他TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些TCP 應用均能夠…

    2017-09-10

評論列表(2條)

  • stanley
    stanley 2015-03-30 23:33

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

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

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

欧美性久久久久