linux 下的shell 指令碼基礎與變數
一、shell 指令碼基礎知識
在電腦科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作介面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。
同時它又是一種程式設計語言。作為命令語言,它互動式解釋和執行使用者輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程式設計語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。
1. 檢視預設shell
方法一:檢視系統變數:echo $SHELL
方法二:通過文字處理命令抓取shell 資訊:grep root /etc/passwd
方法三:檢視使用者記錄資訊檔案的第一行:cat /etc/passwd | head -1
2. shell 指令碼的建立
shell 指令碼檔案最好以“.sh” 結尾
在檔案中第一行要寫:#!/bin/bash
若是,沒有寫在第一行,會被當作為註釋
建立指令碼檔案:
編寫指令碼檔案:
echo 為輸出命令
3. 指令碼執行方法
方法一:利用指令碼命令執行:sh script.sh | bash scrip.sh
方法二:利用路徑執行(此方法需要給指令碼檔案加執行許可權):path/script.sh | ./script.sh
方法三:利用source 或 "." 執行指令碼檔案:source script.sh | . script.sh
這種方法會使用source 或 “.” 來讀入指定shell 檔案,並將變數或函式值返回至父shell
在shell 指令碼檔案中,定義變數
該變數值為一條命令,將命令結果作為值時需要用` 命令` 或 $(命令)
`whoami` 執行結果為當前使用者名稱
用不同方法執行指令碼
只有source 或 “.” 來執行時,才能將指令碼中定義的變數返回並輸出
4. 指令碼開發規範
在檔案開頭要寫如下資訊:所用的shell,指令碼編寫的日期,作者,聯絡方式,此shell 的描述,以及版本號
同時,需要在編寫時加入適當的註釋,便於他人理解
二、指令碼變數
1. 環境變數
環境變數(environment variables)一般是指在作業系統中用來指定作業系統執行環境的一些引數,如:臨時資料夾位置和系統資料夾位置等。
檢視系統環境變數的方法:用命令 printenv 檢視
修改環境變數的方法:vim /etc/profile ,若想馬上生效,需執行source /etc/profile
例如:顯示當前shell ,顯示當前家目錄
2. 檢視系統可以使用的shell
cat /etcshells
3. 定義普通變數
方法一:直接寫變數值
方法二:在單引號中寫變數的值,此時不會對單引號中的值做任何解析,將其完全當作一個字串
方法三:在雙引號中寫變數的值,此時會對雙引號中的值做解析
注:在一般情況下,字串都加雙引號,除非需要原樣輸出時,再加單引號
4. 特殊變數
$0:獲取shell 指令碼檔名,如果執行時包含路徑,則輸出指令碼路徑加檔名
在檔案中編寫輸出$0:
執行指令碼:
$n(n>0):獲取指令碼的第n 個引數
編寫指令碼,輸出指令碼獲取的三個引數
執行指令碼,在指令碼後的字串為輸入的變數值
在指令碼中批量編寫多個變數,“\“ 為轉義符
執行指令碼,並賦值
其中$10 輸出錯誤,是因為,將其看作$1和字元0 輸出,因此$10 要作為變數時,需要表示為${10}
再次執行,發現正確輸出
$#:獲取shell 指令碼引數的總個數
編寫指令碼,輸出$#
執行指令碼,並傳入100個引數,發現輸出100
$?:獲取上一條命令執行狀態的返回值,非0為失敗
$$:獲取當前shell 程序號
三、常用語句
1. 輸入語句:read
read 讀取輸入的值,並將該值儲存在變數中
read -p 和在螢幕中輸出提示語句,並將輸入儲存在變數中
2. 將命令的結果賦值給變數
方法一:` 命令 `
方法二:$(命令)
練習一:將系統日誌目錄下的所有檔案打包,並以log_日期 方式命名
編寫指令碼,其中$(date +%F) 為以年月日的方式顯示日期,也可以用命令:date -I 按要求顯示
執行結果
四、數值計算
1. expr 命令
其中,乘法運算 乘號需要轉義
2. $[ ] 和 $( ( ) ) 表示式
3. let 命令
該命令可以用來計算單目運算
4. bc 命令
bc 用來計算浮點數
bc 命令直接使用時,可以作為計算器
也可用管道符連線echo 命令 進行計算
在計算乘除法時,可用“scale=” 來指定保留小數後幾位
練習二:提示使用者輸入兩個數,並將這兩個數的加、減、乘、除、餘、指數運算結果輸出
若要顯示小數點前面的數字: