linux shell快速入門

Shell 是一個命令行解釋器,它爲用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啓動、掛起、停止甚至是編寫一些程序。

1.shell腳本格式要求

1. 腳本以#!/bin/bash 開頭
2. 腳本需要有可執行權限 

2 Shell的變量

1. Shell 中的變量分爲系統變量和用戶自定義變量。
2. 系統變量:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等..
3. 顯示當前 shell 中所有變量:set

2.1 shell 變量的定義

1. 定義變量:變量名=2.撤銷變量:unset 變量
3. 聲明靜態變量:readonly 變量,注意:不能 unset

定義變量的規則

1.變量名稱可以由字母、數字和下劃線組成,但是不能以數字開頭。5A=200(×)
2. 等號兩側不能有空格
3. 變量名稱一般習慣爲大寫, 這是一個規範

將命令的返回值賦給變量

1. A=`date`反引號,運行裏面的命令,並把結果返回給變量 A
2. A=$(date) 等價於反引號 

3 設置環境變量

1. export 變量名=變量值 (將 shell 變量輸出爲環境變量/全局變量)
2. source 配置文件(讓修改後的配置信息立即生效)
3. echo $變量名(查詢環境變量的值)

shell 腳本的多行註釋

:<<!
xxxxxx
xxxxxx
!

4 位置參數變量

當我們執行一個 shell 腳本時,如果希望獲取到命令行的參數信息,就可以使用到位置參數變量. 比如 : ./add.sh 100 200 , 這個就是一個執行 shell 的命令行,可以在 add腳本中獲取到參數信息

$n (n 爲數字,$0 代表命令本身,$1-$9 代表第一到第九個參數,十以上的參數,十以上的參數需要用大括號包含,如${10})
$* (代表命令行中所有的參數,$*把所有的參數看成一個整體)
$@ (代表命令行中所有的參數,不過$@把每個參數區分對待)
$# (代表命令行中所有參數的個數)

5 預定義變量

就是 shell 設計者事先已經定義好的變量,可以直接在 shell 腳本中使用

1. $$ (當前進程的進程號(PID))
2. $! (後臺運行的最後一個進程的進程號(PID))
3. $?(最後一次執行的命令的返回狀態。如果這個變量的值爲 0,證明上一個命令正確執行;
     如果這個變量的值爲非 0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。)

在一個 shell 腳本中簡單使用一下預定義變量

#!/bin/bash
echo "當前執行的進程 id=$$"
#以後臺的方式運行一個腳本,並獲取他的進程號
/home/brian/show.sh &
echo "最後一個後臺方式運行的進程 id=$!"
echo "執行的結果是=$?"

6 運算符

1. “$((運算式))” 或 “$[運算式] ” 或者 expr m + n 
2. 注意 expr 運算符間要有空格, 如果希望將exp 的結果賦給某個變量,使用 ``
3. expr m - n
4. expr \*, /, % 乘,除,取餘

應用實例 

#!/bin/bash
#案例
1:計算(2+3)X4 的值 #使用第一種方式 RES1=$(((2+3)*4)) echo "res1=$RES1" #使用第二種方式, 推薦使用 RES2=$[(2+3)*4] echo "res2=$RES2" #使用第三種方式 expr TEMP=`expr 2 + 3` RES4=`expr $TEMP \* 4` echo "temp=$TEMP" echo "res4=$RES4" #案例 2:請求出命令行的兩個參數[整數]的和 6 7 SUM=$[$1+$2] echo "sum=$SUM"

7 條件判斷

[ condition ](注意 condition 前後要有空格)
#非空返回 true,可使用$?驗證(0 爲 true,>1 爲 false

[ condition ] && echo “OK” || echo “ERROR” 條件滿足,執行後面的語句

常用判斷條件

1. = 字符串比較

2. 整數的比較
-lt 小於
-le 小於等於 
-eq 等於
-gt 大於
-ge 大於等於
-ne 不等於

3. 按文件權限進行判斷
-r 有讀的權限
-w 有寫的權限
-x 有執行的權限

4. 按文件類型進行判斷
-f 文件存在並且是一個常規的文件
-e 文件存在
-d 文件存在並是一個目錄

8 流程控制

8.1 if 判斷

if [ 條件判斷式 ]
then
    代碼
fi

多分支判斷

if [ 條件判斷式 ]
then
    代碼
elif [條件判斷式]
then
    代碼
fi

注意:[ 條件判斷式 ] 括號和條件判斷式之間必須有空格 

8.2 case語句

case $變量名 in
"值 1")
    如果變量的值等於值 1,則執行程序 1
;;
"值 2")
    如果變量的值等於值 2,則執行程序 2
;;
…省略其他分支…
*)
    如果變量的值都不是以上的值,則執行此程序
;;
esac

8.3 for循環

for 變量 in 值 1 值 2 值 3do
    程序/代碼
done

基本語法2

for (( 初始值;循環控制條件;變量變化 ))
do
    程序/代碼
done

8.4 while循環

while [ 條件判斷式 ]
do
    程序 /代碼
done

注意:while 和 [有空格,條件判斷式和 [也有空格 

9 read讀取控制檯輸入

read(選項)(參數)
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待

應用實例 

#!/bin/bash
#案例 1:讀取控制檯輸入一個 N1 值
read -p "請輸入一個數 N1=" N1
echo "你輸入的 N1=$N1"

#案例 2:讀取控制檯輸入一個 N2 值,在5秒內輸入。
read -t 5 -p "請輸入一個數 N2=" N2
echo "你輸入的 N2=$N2"

10 函數

shell 編程和其它編程語言一樣,有系統函數,也可以自定義函數。

10.1 系統函數

系統函數中,我們這裏就介紹兩個。

basename :返回完整路徑最後 / 的部分,常用於獲取文件名

basename [pathname] [suffix]
basename [string] [suffix]

suffix 爲後綴,如果 suffix 被指定了,basename 會將 pathname 或 string 中的 suffix 去掉。

dirname 返回完整路徑最後 / 的前面的部分,常用於返回路徑部分

dirname 文件絕對路徑 

10.2 自定義函數

[ function ] funname[()]
{
  Action;
  [return int;]
}
調用直接寫函數名:funname [值]

應用實例

#!/bin/bash
#案例:計算輸入兩個參數的和(動態的獲取), getSum
#定義函數 getSum
function getSum() {
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
#輸入兩個值
read -p "請輸入一個數 n1=" n1
read -p "請輸入一個數 n2=" n2
#調用自定義函數
getSum $n1 $n2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章