shell指令碼的概念
將執行的命令按順序儲存到乙個文字檔案
給該檔案可執行許可權
可結合各種shell空值語句已完成更複雜的操作
shell指令碼應用場景
重複性操作
互動性任務
批量事務處理
服務執行狀態監控
定時任務執行
什麼是「shell指令碼」呢?
簡單的說,只要將平時使用的各種linux命令按順序儲存到乙個文字檔案中,然後新增可執行許可權,這個檔案就是乙個shell指令碼
shell的作用——命令直譯器,「翻譯官」
介於系統核心與使用者之間,負責解釋命令列
使用者的登入shell
登入後預設使用的shell程式,一般為/bin/bash
不同shell的內部指令,執行環境等會有所區別
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
1.編寫指令碼**
使用vim文字編輯器
每行一條linux命令,按執行順序依次編寫
[root@server ~]# vim first.sh
cd /boot
pwdls -lh vml*
2.執行指令碼檔案
./first.sh #必須有x許可權
sh first.sh
source first.sh
3.更完善的指令碼構成
指令碼宣告
注釋資訊
可執行語句
[root@server ~]# vim first.sh
#!/bin/bash
# this is my first.sh
cd /boot
echo "當前的目錄位於:"
pwdecho "其中以vml開頭的檔案包括:"
ls -lh vml*
1.互動式硬體裝置
標準輸入:從該裝置接收使用者輸入的資料
標準輸出:通過該裝置向使用者輸出資料
標準錯誤:通過該裝置報告執行出錯資訊
型別裝置檔案
檔案描述編號
預設裝置
標準輸入
/dev/stdin0鍵盤
標準輸出
/dev/stdout
1顯示器
標準錯誤輸出
/dev/stderr
2顯示器
標準輸入,標準輸出和標準錯誤預設使用鍵盤和顯示器作為關聯的裝置,與作業系統進行互動,完成最基本的輸入,輸出操作,即從鍵盤接收使用者輸入的各種命令字串,輔助空值資訊,並將命令結果輸出到螢幕上;如果命令執行出錯,也會將錯誤資訊反饋到螢幕上。
2.重定向操作
在實際的linux系統維護中,可以改變輸入,輸出內容的方向,而不使用預設的標準輸入,輸出裝置(鍵盤和顯示器),這種操作成為重定向。
型別操作符
用途重定向輸入
<
從指定的檔案讀取資料,而不是從鍵盤輸入
重定向輸出
>
將輸出結果儲存到指定的檔案(覆蓋原有內容)
重定向輸出
>>
將輸出結果追加到指定的檔案尾部
標準錯誤輸出
2>
將錯誤資訊儲存到指定的檔案(覆蓋原有內容)
標準錯誤輸出
2>>
將錯誤資訊追加到指定的檔案中
混合輸出
&>
將標準輸出,標準錯誤的內容儲存到同乙個檔案中
3.管道操作符號"|"
將左側的命令輸出結果,作為右側命令的處理物件
cmd1 | cmd2 |[...| cmdn]
變數的作用
用來存放系統和使用者需要使用的特定引數(值)
變數名:使用固定的名稱,由系統預設或使用者定義
變數值:能夠根據使用者設定,系統環境的變化而變化
變數的型別
自定義變數:由使用者自己定義,修改和使用
特殊變數:環境變數,唯讀變數,位置變數,預定義變數
定義乙個新的變數
變數名以字母或下劃線開頭,區分大小寫,建議全大寫
變數名=變數值
檢視變數的值
echo $變數名
可以輸入單個,也可以多個
[root@server ~]# echo $product $version
python 1.1.1
賦值時使用引號
雙引號:允許通過$符號引用其他變數值
單引號:禁止引用其他變數值,$是為普通字元
反撇號:命令替換,提取命令執行後的輸出結果
從鍵盤輸入內容為變數賦值
read [-p "提示資訊"] 變數名
設定變數的作用範圍
格式1:export 變數名...
格式2:export 變數名=變數值...
[root@server ~]# export product version 匯出為全域性變數
[root@server ~]# bash
[root@server ~]# echo $product $version
python 1.1.1
整數變數的運算
expr 變數1 運算子 變數2 [運算子 變數3]...
常用運算子
加法運算:+
減法運算:—
乘法運算:\*
除法運算:/
求模取餘運算:%
1.環境變數
由系統提取建立,用來設定使用者的工作環境
配置檔案:/etc/profile,~/.bash_profile
常見的環境變數
pwd,path
user,shell,home
[root@server ~]# echo $path
/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server ~]# path="$path:/root"
[root@server ~]# echo $path
/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
2.唯讀變數
shell變數中一種特殊情況,一經設定,其值是不可改變的,這種變數被稱為唯讀變數。
[root@server1 ~]# name=cloud
[root@server1 ~]# readonly name #設定為唯讀變數
[root@server1 ~]# echo $name
cloud
[root@server1 ~]# name=yun #不可重新賦值
-bash: name: 唯讀變數
[root@server1 ~]# unset name #不可刪除
-bash: unset: name: 無法反設定: 唯讀 variable
注:唯讀變數的改變是不可逆的,一經唯讀,無法挽回。
3、位置變數(也稱為位置引數,使用$1,$2,$3...$9表示)
當執行命令列操作時,第乙個字段表示命令名或指令碼程式名,其餘的字串引數安裝從左到右的書序依次賦值給位置變數。
[root@server1 ~]# vim adder2num.sh
#!/bin/bash
sum=`expr $1 + $2`
echo "$1 + $2 =$sum"
[root@server1 ~]# chmod +x adder2num.sh
[root@server1 ~]# ./adder2num.sh 12 34
12 + 34 =46
4、預定義變數
$#:表示命令行中位置引數的個數
$*:表示所有位置引數的內容
$?:表示前一條命令執行後的返回狀態,為0即正確,任何非0即出現異常
$0:表示當前執行的指令碼或程式的名稱
Shell程式設計規範與變數
shell的作用 編寫第乙個shell指令碼 重定向與管道操作 shell變數的作用 型別 自定義變數 特殊的shell變數 shell指令碼就是將要執行的命令按順序儲存到乙個文字檔案,並給該檔案可執行許可權,方便一次性執行的乙個程式檔案。主要是方便管理員進行設定或管理,可結合各種shell控制語句...
Shell程式設計規範與變數
四 重定向與管道操作 五 read使用語法 六 shell變數的作用,型別 七 shell變數賦值 八 linux中的運算 九 特殊的shell變數 什麼是shell指令碼?簡單來說,只要將平時使用的各種linux命令按順序儲存到乙個文字檔案中,然後新增可執行許可權,這個檔案就成了乙個shell指令...
Shell程式設計規範與變數
shell指令碼的概念 將要執行的命令按順序儲存到乙個文字檔案 給該檔案可執行許可權 可結合各自shell控制語句以完成更複雜的操作 shell指令碼應用場景 重複性操作 互動性任務 批量事務處理 指令碼執行狀態監測 定時任務執行 簡單來說,將平時使用的各種linux命令按順序儲存到乙個文字檔案,新...