1. 程式人生 > >Shell_指令碼(上)

Shell_指令碼(上)

一、Shell 指令碼入門

1、指令碼格式

指令碼以 #!/bin/bash 開頭(以#! 開頭,/bin/bash指定解析器)

2、HelloWord例項

建立資料夾datas和檔案helloworld.sh,並編輯

在檔案中輸入以下內容:

執行指令碼:

1)第一種:採用bash或sh +指令碼的相對路徑或絕對路徑(不用賦予指令碼+x許可權)

2)採用輸入指令碼的相對路徑或絕對路徑執行指令碼(必須具有可執行的+x許可權)

注意第一種方法本質上是bash解析器幫你執行指令碼,所以指令碼本身不需要執行許可權。第二種方法,本質上是指令碼需要自己執行,所以需要執行許可權

3、第二個Shell指令碼:多命令處理

新增如下內容,在/asus/home/目錄下新建檔案然後寫入內容

執行指令碼

二、Shell中的變數

1、系統變數

常用的系統變數有

$HOME(家目錄)、$PWD(當前目錄)、$SHELL(解析器)、$USER(當前使用者)等

2、自定義變數

1)、基本語法

① 定義變數:變數=值

② 撤銷變數:unset 變數

③ 宣告靜態變數:readonly 變數,注意:不能unset

2)、定義變數規則

① 變數名稱可以由字母、數字、下劃線組成,但是不能以數字開頭,環境變數名建議大寫

② 等號兩側不能有空格

③ 在bash中,變數的預設型別都是字串型別,無法直接進行數值運算。

④ 變數的值如果有空格,需要使用雙引號或者單引號括起來。

3)、例項:

靜態變數不能unset

在bash中,變數的預設型別都是字串型別,無法直接進行數值運算

如果變數的值有空格,需要使用雙引號或單引號括起來

4)、將變數提升為全域性環境變數,可以供其他Shell程式使用

export  變數名

在helloworld.sh中加入如下內容:

執行發現並沒有列印 $B 對應的值

3、特殊變數

1)

$n:n為數字,$0代表該指令碼名稱,$1~$9代表第一個到第九個引數,十以上的引數需要用大括號包含,如${10}

例項:

一共四個引數

執行:

2)

$#:獲取所有輸入引數的個數,常用於迴圈

例項:新增 echo $#

 執行:

3)

$*:這個變數代表命令列中的所有引數,$*把所有引數看成一個整體

[email protected]:這個變數代表命令列中的所有引數,不過[email protected]把每個引數區分對待

例項:

執行:

4)

$?:最後一次執行的命令返回的狀態。如果這個變數的值為0,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數由命令自己決定),則證明上一個命令執行不正確了。

例項:

判斷helloworld.sh是否正確執行

三、運算子

1、語法

① $((運算式)) 或 $[運算式]

② expr +,-,\*,/,%   加,減,乘,除,取餘

注意:expr運算子間要有空格

2、例項

1)3+2

2)(2+3)*4

採用expr一步完成計算

採用 $[運算式] 方式

四、條件判斷

1、語法

[ condition ] (注意condition前後要有空格)

注意:條件非空即為true,[asus]返回true,[ ] 返回false

2、常用判斷條件

1)兩個整數之間的比較

= 字串比較

-lt 小於(less than)                     -le 小於等於(less equal)

-eq 等於(equal)                         -gt 大於(greater than)

-ge 大於等於(greater equal)    -ne 不等於(Not equal)

2)按照檔案許可權進行判斷

-r 有讀的許可權(read)                 -w 有寫的許可權(write)

-x 有執行的許可權(execute)

3)按照檔案型別進行判斷

-f 檔案存在並且是一個常規的檔案(file)

-e 檔案存在(executence)  -d 檔案存在並是一個目錄(directory)

3、例項

1)23是否大於等於22

2)helloworld.sh是否具有寫的許可權

3)home/asus/good.txt目錄中的檔案是否存在

4)多條件判斷(&&表示前一條命令執行成功時,才執行後一條命令,||表示上一條命令執行失敗後,才執行下一條命令)