2.1 shell指令碼
我們在上面簡單介紹了一下什麼是shell指令碼,現在我們來進一步的來介紹shell指令碼的要求/格式/規範等內容
2.1.1 建立指令碼
指令碼建立工具:
建立指令碼的常見編輯器是 vi/vim.
指令碼命名
shell指令碼的命名簡單來說就是要有意義,方便我們通過指令碼名,來知道這個檔案是幹什麼用的。
指令碼內容:
各種可以執行的命令
注釋內容:
單行注釋:
除了首行的#不是注釋外,其他所有行內容,只要首個字元是#,那麼就表示該行是注釋
#!/bin/bash
echo 『1』
echo 『3』
多行注釋:
多行注釋有兩種方法::<2.1.2 指令碼執行
shell執行的方式
shell指令碼的執行通常可以採用以下幾種方式
bash /path/to/script-name 或 /bin/bash /path/to/script-name (強烈推薦使用)
/path/to/script-name 或 ./script-name (當前路徑下執行指令碼)
source script-name 或 . script-name (注意「.「點號)
vim pyhello
指令碼內容
#!/usr/bin/python3.5
print(『hello world』)
新增許可權
chmod +x pyhello
執行指令碼
./pyhello
2.2 變數
變數的學習我們主要從四個方面來學習:
變數的定義和分類
本地變數
全域性變數
shell內建變數
2.2.1 什麼是變數
變數是什麼?
變數包括兩部分:
變數名 不變的
變數值 變化的
我們一般所說的變數指的是:變數名
2.2.2 本地變數
本地變數是什麼?
本地變數就是:在當前系統的某個環境下才能生效的變數,作用範圍小。
本地變數包含兩種:普通變數和命令變數
普通變數:
普通變數的定義方式有如下三種,接下來我們就分別說一下這三種方式:
方式一:
變數名=變數值
重點:變數值必須是乙個整體,中間沒有特殊字元
方式二:
變數名=『變數值』
重點:我看到的內容,我就輸出什麼內容
方式三:
變數名=「變數值」
重點:如果變數值範圍內,有可以解析的變數a,那麼首先解析變數a,將a的結果和其他內容組合成乙個整體,重新賦值給變數b
習慣:數字不加引號,其他預設加雙引號
命令變數(熟練)
命令變數有兩種定義方式,接下來我們就來介紹一下這兩種方式
定義方式一:
變數名=命令
注意:` 是反引號
定義方式二:
變數名=$(命令)
2.2.3 全域性變數
全域性變數是什麼
全域性變數就是:在當前系統的所有環境下都能生效的變數。
檢視全域性變數命令
可以通過命令檢視環境變數
env 只顯示全域性變數
定義全域性變數
方法一:
變數=值
export 變數
方法二:(最常用)
export 變數=值
2.2.4 變數檢視和取消
檢視變數:
方式一:
變 量名
場景:私
下里,在
命令列/
指令碼中使
用圖省事
方式二:
"變數名 場景: 私下裡,在命令列/指令碼中使用 圖省事 方式二: "
變數名場景:
私下裡,
在命令列
/指令碼中
使用圖省
事方式二
:"變數名"
場景:私下裡,在命令列/指令碼中使用
圖省事方式三:
$場景:
echo " dsa dsafsa dsafsa 變數名
f"使用
頻率較高
方式四:
"f " 使用頻率較高 方式四: "
變數名f"使
用頻率較
高方式四
:""場景:
標準使用方式
2.2.5 shell內建變數
我們之前學習的本地變數,全域性變數都是需要通過定義,然後才能實現相應功能的,那麼有沒有一些變數我們可以直接拿過來使用實現某種具體的功能呢?有,這就是shell內建變數
和指令碼檔案有關
符號 意義
$0 獲取當前執行的shell指令碼檔名,包括指令碼路徑
n 獲取
當前執行
的she
ll指令碼
的第n個
引數值,
n=
1..9,當
n為0時
表示指令碼
的檔名
,如果n
大於9就
要用大括
號括起來
n 獲取當前執行的shell指令碼的第n個引數值,n=1..9,當n為0時表示指令碼的檔名,如果n大於9就要用大括號括起來
n獲取當前執
行的sh
ell腳
本的第n
個引數值
,n=1
..9,
當n為0
時表示腳
本的檔案
名,如果
n大於9
就要用大
括號括起
來$# 獲取當前shell命令列中引數的總個數
$? 獲取執行上乙個指令的返回值(0為成功,非0為失敗)
重點內建變數演示效果:
$0 獲取指令碼的名稱
示例:#!/bin/bash
echo 「我指令碼的名稱是: file.sh」
echo 「我指令碼的名稱是:$0」
$# 獲取當前指令碼傳入引數的數量
$n 獲取當前指令碼傳入的第n個位置的引數
示例:#!/bin/bash
echo 「當前指令碼傳入的引數數量是: $#」
echo 「第乙個位置的引數是: $1」
echo 「第二個位置的引數是: $2」
echo 「第三個位置的引數是: $3」
echo 「第四個位置的引數是: $4」
$? 獲取檔案執行或者命令執行的返回狀態值
示例:bash: nihao: no such file or directory
file1.sh
num.sh
test.sh
weizhi.sh
字串精確擷取
格式:$
示例:$ 從第1個字元開始,擷取5個字元
$ 從第1個字元開始,擷取5個字元
$ 從第6個字元開始,擷取5個字元
$ 從第6個字元開始,擷取後面所有的字元
$ 從倒數第5個字元開始,擷取後面所有的字元
$ 從倒數第6個字元開始,擷取之後的3個字元
格式:
$**示例:
如果我輸入的引數為空,那麼輸出內容是 "您選擇的**是: ** 1"
如果我輸入的引數為n,那麼輸出內容是 "您選擇的**是: ** n"
#!/bin/bash
a="$1"
echo 「您選擇的**是: ** $」
場景二:
無論變數a是否有內容,都輸出預設值
格式:$
場景示例:
不管我說國家法定結婚年齡是 多少歲,都輸出 國家法定結婚年齡(男性)是 22 歲
#!/bin/bash
Shell 程式設計基礎
2 shell 程式設計基礎 shell 簡介認識後台程式 bash 程式設計熟悉 linux 系統下的編輯環境 熟悉linux 下的各種 shell 熟練進行 shell 程式設計熟悉 vi基本操作 熟悉emacs 的基本操作 比較不同 shell 的區別編寫乙個測試伺服器是否連通的 shell ...
shell程式設計基礎
1.熟悉shell 1.1 基本語法 bin bash shell必須以上面所示的開頭,以 開頭的語句表示注釋。1.2 新增可執行許可權 chmod u x 檔名 1.3 建立簡單的shell bin bash echo n hell user,today is date echo good luc...
shell 程式設計基礎
1.基礎正規表示式 aa 表示至少包含乙個a的行,a 匹配所有內容 匹配任意乙個字元,精準匹配 grep 提取文字中的字元 grep v root 取反不包括root的行 2.cut 命令 f第幾列 d分隔符 3.printf ni輸出n個整數 ns n個字元 m.nf m.nprintf s t ...