shell腳本基礎

程序是由指令加數據組成

編程風格分為過程式和對象時

過程式:以指令為中心,數據服務于指令,適合小型程序

對象式:以數據為中心,指令服務于數據,社和大型程序

高級語言的執行方式分為編譯型和解釋型

編譯型:先將高級語言通過編譯器編譯成二進制代碼再執行

解釋型:程序編寫完成后不轉換成二進制代碼,在使用時才通過解釋器解釋運行,不生成二進制程序

shell就是一種解釋器

程序的執行分為順序執行,循環執行,條件執行

bash –n:檢測腳本語法錯誤

bash –x:對腳本進行調試執行

PATH:默認不包括當前目錄,要想直接執行腳本,除了要有執行權限,目錄權限外還要寫路徑或將腳本所在路徑加入PATH中

設置變量時使用  變量名=變量內容

注意:變量內容默認是字符型,變量內容有空格要用雙引號引起來,變量名第一位不能是數字

刪除變量時使用后  unset 變量名

bash是弱類型,變量無需事先定義,默認為字符型,參與運算時會自動進行隱式轉換,不支持浮點式

變量命名規則:

不能使用程序保留字,如if,for等

只能使用字母,數字,下劃線,不能數字開頭

見命知意

統一命名規則

小駝峰:第一個單詞首字母小寫,其余首字母大寫

大駝峰:所有單詞首字母大寫

set命令可以查詢所有變量  env可以查詢所有環境變量

各種變量范圍

本地變量:對當前shell進程有效,對其他shell或當前shell子shell無效

環境變量:對當前shell及子shell有效

局部變量:對當前shell某片斷有效

位置變量:$1,$2…..讓腳本可以在代碼中調用命令行中的參數

特殊變量:

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

$1:傳遞給腳本的第一個參數

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

$*:傳遞給腳本的所有參數(與$@相比,在加””情況下$*是把所有參數作為一個整體,$@是把每一個參數都單獨列出來)

$?:上調命令執行結果

注:$10會被系統識別為$1   0

引用變量時要加$或者${}

定義環境變量可以使用export 或者declear –x

環境變量可以在定義時就聲明或在定義普通變量后再進行聲明

只讀變量可以使用readonly 或者 declear –r

短路與:  第一個為0,后面不用繼續運行  第一個為1,第二個必須要參與運算; 

短路或:  第一個為1,后面不用繼續運行  第一個為0,第二個必須要參與運算;  ?

異或:^  異或的兩個值,相同為假,不同為真

實現算術運算: 

1. let var=算術表達式

2.var=$[算術表達式] 

3.var=$((算術表達式)) 

4.var=$(expr arg1 arg2 arg3 …) 

5. declare –i var = 數值 

6. echo ‘算術表達式’ | bc

bash中的測試指令 test或 []或[[]]

數值比較:

gt:大于

ge:大于等于

lt:小于

le:小于等于

eq:等于

ne:不等于

字符串比較:

==:等于

!=:不等于

=~:前面的字符串能被后面的表達式所匹配(一般用在[[]]中)

>:大于

<:小于(<>比較的是字符的ascii碼)

-z:字符串是否為空

-n:字符串是否為非空

存在性及類別測試

-e:文件是否存在

-b:文件是否為塊設備文件

-c:文件是否為字符設備文件

-d:文件是否為目錄文件

-f:文件是否為普通文件(包括了鏈接文件)

-p:文件是否為管道文件

-h/-L:文件是否為符號鏈接文件

-S:文件是否為套接字文件

-s:文件是是否存在且非空

-O:當前用戶是否為該文件屬主

-G:當前用戶是否為該文件屬組

-N:文件自上一次被讀取后是否被修改過

雙目測試:

#1-ef #2:兩個文件是否指向同一個inode

#1-nt #2:文件1是否新與文件2

#1-ot #2: 文件1是否舊與文件2

組和測試

&&:并且

||:或者

!:非

#1&&#2 = [  #1 –a #2  ]

#1||#2 = [  #1 –o #2  ]

注:正則表達式需要寫在[[]]中,而-a,-o則不支持[[]]

使用bash運行腳本相當于打開一個子shell運行

.或source相當于在當前shell運行命令

if語句使用方式

單分支:

if 判斷條件;then

代碼

else

代碼

fi

多分支:

if 判斷條件;then

代碼

elif判斷條件;then

代碼

……

else

代碼

fi

 

raad命令可以實現交互式輸入變量

read –p:可以輸出提示信息并接受變量

read –t:指定命令輸入時間

case命令用法(case支持glob通配符):

case $變量 in 

判斷條件)

分支1

;;

判斷條件)

分支2

;;

……….

*)

默認分支

;;

esac

循環執行:將代碼重復運行多次

for循環用法(比較適合數字)

for 變量名 in 列表;do

循環體

done

依次將列表中元素賦給變量,每次賦值后就執行循環體,知道列表中元素耗盡

列表生成方法:

1、直接給出

2、整數列表   {start…end}   $seq [start  end]

3、返回到列表的命令

4、使用通配符

5、變量引用

while循環用法

while 條件;do

循環體

done

進入循環前要先判斷條件是否成立,每次循環后再次進行判斷,直到條件不滿足為止

判斷條件中一般應有循環控制變量,該變量會隨著循環體進行而修正

until循環用法

until 條件;do

循環體

done

進入循環前要先判斷條件是否成立,不成立進入循環,成立則跳過

break:退出當前循環

exit:退出當前shell

continue:結束當次循環,繼續下次循環

原創文章,作者:zzzzz1357x1,如若轉載,請注明出處:http://www.www58058.com/36831

(0)
zzzzz1357x1zzzzz1357x1
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • 網絡接口配置–Bonding

    網絡接口配置–Bonding Bonding        就是講到快網卡綁定到同一IP地址對外服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡被修改為同一MAC地址。 一 Bonding …

    Linux干貨 2017-05-07
  • 第六周:vim編輯器和cron計劃任務的使用練習

    查看vim編輯器的使用介紹另見:http://afterdawn.blog.51cto.com/7503144/1855557 at及cront計劃任務介紹見:http://afterdawn.blog.51cto.com/7503144/1864365 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件…

    Linux干貨 2016-10-26
  • N26-第十四周

    1、系統的INPUT和OUTPUT默認策略為DROP;[root@centos7 ~]# iptables -P INPUT DROP[root@centos7 ~]# iptables -P OUTPUT DROP1、限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不允許訪問;web服務…

    Linux干貨 2017-06-20
  • 操作系統文件管理

      在現代計算機系統中,要用到大量的程序和數據,因內存容量有限,且不能長期保存,故而平時總是把它們以文件的形式存放在外存中,需要時再隨時將它們調入內存。如果由用戶直接管理外存上的文件,不僅要求用戶熟悉外存特性,了解各種文件的屬性,以及它們在外存上的位置,而且在多用戶環境下,還必須能保持數據的安全性和一致性。顯然,這是用戶所不能勝任、也不愿…

    Linux干貨 2015-04-13
  • 正則表達式

    正則表達式是一種以一些字符賦予特殊意義之后,用來表達字符串,用以篩選各種形式的字符串用來進行查找、替換、刪除等各種文本編輯作用的一種表示方式。 正則表達式的特殊字符 字符表示 .   可以表示任意可打印字符 [] 中括號范圍內任意單個字符 [^] 中括號范圍外任意單個字符 (相對所有可打印字符) [:space:] 表示任意單個空白字符 [:dig…

    2017-08-03

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 09:26

    腳本語法需要總結好,更重要的是多寫多練,作業需要好好完成呢

欧美性久久久久