一、shell腳本基本介紹
格式要求
- 腳本要以 #!/bin/bash 開頭,debain需要改成#!/bin/dash
- 腳本需要有可執行權限
shell常用執行方式
- 輸入腳本的絕對路徑或相對路徑(該方式首先要賦予腳本執行權限)
- sh+腳本 不用執行賦予腳本執行權限也可以執行
- #!/bin/bash 開頭的需要 bash+腳本
二、shell的變數
變數介紹
- Linux Shell中變數分為:系統變數和用戶自定義變數
- 系統變數:

- 顯示當前shell中所有變數:set
變數定義
- 定義變數:變數名=值
- 撤銷變數:unset 變數
- 宣告靜態變數:readonly 變數 ,靜態變數不能unset
- 變數命名規則:
- 變數可以由字母、數字和下劃線組成,但不能以數字開頭
- 等號兩側不能有空格
- 變數名稱一般習慣為大寫(shell撰寫的一個規范)
- shell注釋規則
單行注釋
# 內容
多行注釋
:<<!
內容
!
設定環境變數
- export 變數名=變數值 將shell變數輸出為環境變數/全域變數
- source 組態檔 將修改后的配置資訊立即生效
位置引數變數
介紹
當我們執行一個shell腳本時希望獲取命令列引數資訊時,可以用到位置引數變數
如:./123.sh 111 222,這就是一個執行shell的命令,123.sh就可以使用位置引數變數獲取到引數資訊
基本語法
$n(功能描述:n為數字,$0代表命令本身,$1-\(9代表第1-9個引數,10以后的引數需要用大括號包裹起來例如:\){100})$*(功能描述:該變數代表命令列中所有引數)$@(功能描述:該變數也代表命令列所有引數,\(@與\)*不同的是前者吧每個引數區別對待,后者是看成一個整體)$#(功能描述:變數代表命令列中所有引數的個數)
預定義變數
介紹:shell設計之初就已經定義好的變數,可以直接使用
基本語法
- $$當前行程的行程號
- $!后臺運行的最后一個行程的行程號
- $?最后一次執行的命令的回傳狀態,如果為零者上一個命令正確執行,非零則上一次命令執行不正確
shell要在后臺方式運行一個腳本:腳本名稱 &
#!/bin/bash
#以后臺方式運行123.sh
/home/kali/123.sh &
三、運算子
- \(((運算式))或\)[運算式]或者expr m + n
- expr運算子之間要有空格,如果希望將expr的結果賦給某個變數需要使用 ``
- expr 的乘,除,取余:* /%
#!/bin/bash
#案例1:計算(2+3)*4
#第一種
R1=$(((2+3)*4))
#第二種
R2=$[(2+3)*4]
#第三種
T=`expr 2 + 3`
R3=`expr $T \* 4`
四、條件判斷
基本語法:
[ condition ]
注:條件前后需要有空格
非慷訓傳ture
判斷陳述句
- = 字串比較
- 兩個整數的比較
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
- 按照檔案權限進行判斷
- -r 有讀的權限
- -w 有寫的權限
- -x 有執行的權限
- 按照檔案型別進行判斷
- -f 檔案存在并且是一個常規檔案
- -e 檔案存在
- -d 檔案存在并是一個目錄
五、流程判斷
1.if判斷
基本語法
#!/bin/dash
if[ 條件判斷式 ]
then
代碼
elif[ 條件判斷式 ]
then
代碼
fi
注意事項:[ 條件判斷 ] 中括號和條件判斷式之間必須有括號
應用案例
#!/bin/dash
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
# 執行命令 bash xxx.sh
2.case陳述句
基本語法
case $變數 in
"值1")
程式1 #如果變數的值等于值1,則執行程式1
;;
"值2")
程式2 #如果變數的值等于值2,則執行程式2
;;
#省略其他分支
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac
案例:
#!/bin/dash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
"3")
echo "周三"
;;
"4")
echo "周四"
;;
"5")
echo "周五"
;;
*)
echo "該放假了"
;;
esac
3.for回圈
基本語法
#!/bin/dash、
for (( 初始值; 回圈控制條件; 變數變化))
do
程式
done
案例:遍歷陣列
#!/bin/dash
a=(10 20 30 40)
for (( i=0; i<4; i++))
do
echo ${a[i]}
done
shell中陣列用括號包圍,數和數之間用空格間隔
4.while回圈
基本語法
#!/bin/dash
while [ 條件判斷式 ]
do
程式
done
#注:while與[]符號之間需要有空格分割
案例:從命令列輸入一個num,計算從1加到num是多少
#!/bin/dash
SUN=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM
六、read讀取控制臺輸入
基本語法:read 【選項】 【引數】
選項:
- -p指定讀取值時的提示符
- -t指定讀取值時等待的時間(秒)
引數:指定讀取值的變數名
案例:讀取控制臺輸入值并輸出輸入值的平方
#!/bin/dash
read -p "請輸入一個數num=" NUM
NUM1=$[$NUM*$NUM]
echo "num的平方=$NUM1"
七、函式
1.系統函式
basename 函式
語法:basename 【檔案路徑】 【后綴】
功能:回傳完整路徑最后/的部分,常用于獲取檔案名字
后綴:若后綴被指定,將會去除相應后綴
案例:

dirname函式
語法:dirname 【檔案絕對路徑】
功能:回傳完整路徑最后/的前面的部分,常用于回傳路徑部分
案例:

2.自定義函式
基本語法
function 函式名 (){
程式代碼
}
呼叫時直接寫函式名稱
案例:計算輸入的兩個引數的和
#!/bin/dash
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "n1=" n1
read -p "n2=" n2
getSum $n1 $n2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/510838.html
標籤:其他
