Shell 腳本基礎:包含一些命令或聲明并符合一定格式的文本文件
Shell 腳本用途:
1. 自動化常用命令
2. 執行系統管理和故障排除
3. 創建簡單的應用程序
4. 處理文本和文件
創建Shell腳本:
首行的固定寫法:
1. #!/bin/bash
2. #!/bin/sh
注:此行是告訴系統執行的時候要調用什么解釋器。如果首行不寫,那么執行的時候需要使用命令bash。
腳本寫法:
注釋寫法:
#!/bin/bash
#
#Filename:XXXX.sh 腳本文件名稱
#Description:xxxx 說明
#Author:xxxx 作者
#Email:xxxx@xx.xxx 聯系方式
#Revision:1.0 版本
#Date:xxxxx 腳本創建日期
#Note:xxxx 注解
注:每一行之前最好有一個注釋;腳本名稱使用.sh結尾的盡量避免使用中文;#表示注釋,此行不執行。
腳本的執行:
1. bash
2. sh
3. 加執行權限
1) 相對路徑
2) 絕對路徑
3) 放到$PATH變量指定的目錄里面,直接執行(tab)
腳本調試執行:
bash -n 檢查語法錯誤,不檢查拼寫錯誤
bash -x或sh -x 顯示腳本執行的時候每一個命令具體的執行結果
變量:暫時存放數據的地方,一個具有名稱的內存地址空間。
數據存儲方式:1. 字符
2. 數值: 整形、浮點型
作用:1. 數據存儲格式
2. 參與的運算
3.表示的數據范圍
類型:
強類型(如 JAVA C#):數值型和字符型不能直接計算,除非顯示把字符型轉換成數值型。
弱類型(如 shell php):不會嚴格區分變量類型,定義變量的時候不用指定變量類型,默認字符型,如果想要計算的時候會自動幫你轉換成數值型。
變量的命名規則:
1.不能使用if for bash cd ls date 關鍵字
2.不能以數字開頭,不能使用特殊符號,只能使用數字、字母及下劃線
3.見名知意:看見名字知道此文件的意義
4.建議變量使用大寫
bash變量的種類:
本地變量(全局變量) 僅僅對當前shell生效
環境變量 對當前shell以及其他shell都生效 export
局部變量(私有變量) 生效范圍位當前shell進程中某代碼片段,通常用在函數里面,使用local
本地變量:name=’value’
可以使用引用value:
1.可以是直接字串:name=”root”
2.變量引用:name=”$USER”
3.命令引用:name=COMMAND
name=$(COMMAND)
變量引用:${name} $name
” ” :弱引用 會把雙引號里面的變量替換
‘ ‘ :強引用 不會把引號里面的變量進行替換
“ : 把反引號里面的命令執行結果賦值給變量
顯示已定義的所有變量: set
刪除變量: unset name
注:取消變量和變量置空是兩種不同概念 unset HZ
HZ=
環境變量:
變量聲明、賦值:
export name=VALUE
declare -x name=VALUE
變量引用: $name, ${name}
顯示所有環境變量:
env, pringtenv, export, declare -x ,set
刪除: unset name
bash有許多內建的環境變量:
$PATH 命令的搜尋路徑
$OLDPWD 前一個工作目錄
$LANG 目前的工作語系
$BASH bash的完整路徑名
$BASH_VERSION Bash的版本
$HISTCONTROL 控制指令是否存入歷史文件中
$OSTYPE 顯示系統類型
$MAIL 存放郵件的文件
$MAILCHECK 多久檢查一下郵件
$PWD 當前路徑
$SSH_tty 當前登錄的tty
$SHLVL 當前shell在幾層
$RANDOM 隨機數
只讀變量:只能聲明,但不能修改和刪除
聲明只讀變量:readonly name
declare -r name
查看只讀變量: readonly -p
位置變量: 在腳本代碼中調用通過命令行傳遞給腳本的參數
$1,$2,…: 對應第1、第2等參數,shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合為一個字符串
$@: 傳遞給腳本的所有參數,每個參數為獨立字符串。如”$@”用「”」括起來的情況、以”$1″ “$2” … “$n” 的形式輸出所有參數。
$#: 傳遞給腳本的參數的個數
注:$@、$*只在被雙引號包起來的時候才會有差異
set — 清空所有位置變量
算數運算
1. let num=算數表達式 let r=9+9
2. var=$[算數表達式] r=$[9+9]
3. var=$((算數表達式)) r=$((9+9))
4. expr 8 + 3 (注意要有空格?。?!)
5. declare -i r=9+9
6. bc 計算1-100的和:echo {1..100} | tr ” ” “+” | bc
注: expr 8 * 8 乘號需要用\轉義,除號不用
+=, i+=3等于i=i+3
-=, i-=3等于i=i-3
=, i=3等于i=i*3
/=, i/=3等于i=i/3
%=, i%=3等于i=i%3
i++ 先執行 執行完加1 (用的比較多)
++i 先加1,再執行
邏輯運算
true 1 false 0
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
與的時候 只要有一個為假 那么整個結果就是假的。
或的時候 只要有一個為真 那么整個結果就是真。
!1 = 0
!0 = 1
&& 與
|| 或
1 && 1 = 1
1 && 0 = 0
1 || 1 = 1
1 || 0 = 1
命令執行成功 我們認為是真
命令執行失敗 我們認為是假
短路預算:
命令1 && 命令2
命令1 成功執行 則執行命令2
命令1 執行失敗 則不會執行命令2
命令1 || 命令2
命令1成功執行,則命令2不執行
命令1執行失敗,則命令2執行
命令1 && 命令2 || 命令3
如果命令1 成功執行 則執行命令2 且命令3不會執行
如果命令1 執行失敗 那么命令2就不會執行,則命令3執行
如果 命令1 成功
則 命令2;
否則 命令3;
退出狀態
使用$? 0代表前面一個命令執行成功
非0 代表前面一個命令執行失敗
可以在腳本里面自定義退出狀態
根據退出狀態來判斷一個命令的執行成功與否
exit [n]:自定義退出狀態碼
注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit命令后面的數字
注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼
測試條件
test 測試條件
[ 測試條件 ]
[[ 測試條件 ]] 條件測試的前后要加上空格
生產環境建議使用兩個中括號
數值測試:
-gt: 是否大于
-ge: 是否大于等于
-eq: 是否等于
-ne: 是否不等于
-lt: 是否小于
-le: 是否小于等于
[[ 6 > 2 ]] && echo “OK”
字符串測試
== 是否等于
> 是否大于
< 是否小于
!= 是否不等于
=~ 左邊的字符串是否包含右邊指定的字符串
注:此表達式一般用于[[ ]]中;擴展的正則表達式
-z 測試字符串是否為空,空為真,不空為假
-n 測試字符串是否不為空,不空為真,空為假
注:用于字符串比較時的用到的操作數都應該使用引號
原創文章,作者:木,如若轉載,請注明出處:http://www.www58058.com/73306
主要介紹了shell腳本編程的基礎用法,內容總結的非常詳細,但是排版上還需要再注意一下!