Linux之Shell指令碼程式設計
Shell概念
一、概念
Shell 是一個用 C 語言編寫的程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心
的服務。Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形介面 Shell。
二、Shell 指令碼
一種為 shell 編寫的指令碼程式。業界所說的 shell 通常都是指 shell 指令碼,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。本文出現的 “shell程式設計” 都是指 shell 指令碼程式設計。Shell環境Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。
Linux 的 Shell 種類眾多,常見的有:
n Bourne Shell(/usr/bin/sh或/bin/sh)
n Bourne Again Shell(/bin/bash)
n C Shell(/usr/bin/csh)
n K Shell(/usr/bin/ksh)
n Shell for Root(/sbin/sh)
三.Shell環境
Bash,也就是 Bourne Again Shell,由於易用和免費,Bash 在日常工作中被廣泛使用。同時,Bash 也是大多數Linux 系
統預設的 Shell。在一般情況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同
樣也可以改 為 #!/bin/bash。#! 告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的 Shell 程式。
【1】Shell程式步驟
1、建立一個檔案,副檔名為.sh。
2、修改檔案的許可權為可執行檔案
3、執行
【2】Shell結構
1、#! 用來指定執行指令碼的shell
2、# 註釋
3、 命令和控制結構
【4】Shell變數
命名規則:
1、命名只能使用英文字母,數字和下劃線,首
個字元不能以數字開頭。
2、中間不能有空格,可以使用下劃線(_)。
3、不能使用標點符號。
4、不能使用bash裡的關鍵字(可用help命令檢視
保留關鍵字)
使用規則:
1、習慣用大寫字母來命名變數
2、賦值時,”=”前後不能有空格
3、命令的執行結果賦值給變數時
使用反單引號 如:TIME=`date`
4、使用變數時,使用$變數名/${變數名}
只讀變數使用readonly,
此命令可以將變數定義為只讀變數,只讀變數的值不能被改變刪除變數使用unset,變數刪除後不能再次被使用,
unset不能刪除只讀命令
變數型別:
臨時變數: 也叫區域性變數,在指令碼或命令中定義,
僅在當前shell例項中有效,其他shell啟動的程式
不能訪問區域性變數。
永久變數: 也叫環境變數,所有的程式,包括sh
ell啟動的程式,都能訪問環境變數,有些程式需
要環境變數來保證其正常執行。必要的時候shell
指令碼也可以定義環境變數。
【5】Shell字串
字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),
字串可以用單引號,也可以用雙引號,也可以不用引號
單引號:
1、單引號裡的任何字元都會原樣輸出,單引號字
符串中的變數是無效的;
2、單引號字串中不能出現單引號(對單引號使用
轉義符後也不行)。
雙引號:
1、雙引號裡可以有變數
2、雙引號裡可以出現轉義字元
一、拼接字串
兩種方式:
1、無縫拼接
2、雙引號內直接使用變數
二、獲取字串長度
語法1: ${#name}
語法2: expr length ${name}
Shell字串
三、提取子字串
語法:${name:startIndex:length}
${name:startIndex}
${name:0-index:length}
${name:0-index}
還可以使用 #、##、%、%%進行刪除後保留子串
#、## :從左邊開始刪除。
# 表示從左邊刪除到第一個指定的字元;
## 表示從左邊刪除到最後一個指定的字元。
%、%% :從右邊開始刪除。
% 表示從右邊刪除到第一個指定的字元;
%% 表示從左邊刪除到最後一個指定的字元。
刪除包括了指定的字元本身。
四、查詢子字串:
#、## :從左邊開始刪除。
# 表示從左邊刪除到第一個指定的字元;
## 表示從左邊刪除到最後一個指定的字元。
%、%% :從右邊開始刪除。
% 表示從右邊刪除到第一個指定的字元;
%% 表示從右邊刪除到最後一個指定的字元。
刪除包括了指定的字元本身。
Shell陣列
1、Bash僅僅支援一維陣列,並且沒有限定陣列的
大小。
2、陣列元素的下標從0開始。
3、獲取陣列中的元素要利用下標,
4、下標使用不當,會報錯。
【6】Shell陣列
一、定義陣列
語法1:
arrayName=(值1 值2 … 值n)
語法2:
arrayName=(
值1
值2
..
值n
)
注意:元素間使用空格分隔開或者換行符
或者直接定義陣列的各個元素
name[0]=值1
name[1]=值2
name[n]=值n
Shell陣列
二、讀取陣列
格式:${name[index]}
三、獲取陣列所有元素
格式:
${name[*]} 或${name[@]}
四、獲取陣列長度
格式:
${#name[*]}或${#name[@]}