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)多條件判斷(&&表示前一條命令執行成功時,才執行後一條命令,||表示上一條命令執行失敗後,才執行下一條命令)