Shell指令碼基礎知識及案例
Shell 指令碼(即 Shell Script),Shell 指令碼類似於 Windows/Dos 下的批處理,也就是將所需的各類命令預先放入到一個檔案中,方便一次性執行的一個程式檔案,主要應用在 Linux 系統運維上,方便管理員進行設定或者管理用的。但是它比 Windows 下的批處理更強大,比用其他程式語言編寫的程式效率更高。由於它使用了 Linux/Unix 下的命令,因此想編寫滿足功能需求的 Shell 指令碼,需要了解各種 Linux/Unix 命令,如 grep、sed、awk 等等。
Shell 指令碼的第一行
一般來說,Shell 指令碼的第一行用於指定執行該指令碼的直譯器,如:
#!/bin/bash
“#!”符號讀作“Sha-bang”,是 Shell 指令碼的起始符號,後面緊跟直譯器的路徑,這裡是 /bin/bash,此外我們還可能看到 /bin/sh、/bin/python 等等。
Shell 指令碼的變數
我們在 Shell 指令碼中經常會遇到 $#
、$*
、$$
、[email protected]
、$0
、$1
、$2
、$?
等形式的符號,要是不清楚其含義,就很容易懵逼,所以有必要記住以下這些規則。
$# —— 表示執行指令碼傳入引數的個數
$* —— 表示執行指令碼傳入引數列表
$$ —— 表示程序id
—— 表示執行指令碼傳入所有引數$0 —— 表示執行指令碼名稱
$1 —— 表示第一個引數
$2 —— 表示第二個引數
$? —— 表示指令碼執行狀態0正常,其他表示有錯誤
Shell 指令碼中可以加入延時
在 Shell 指令碼中經常需要做一些延時處理,那麼延時需要用到系統的 sleep 或 usleep。
sleep : 預設以秒(s)為單位
usleep : 預設以微秒(us)為單位【 1s = 1000ms = 1000000us 】
此外,sleep 不僅可以用秒為單位,還可以指定延遲的單位,例如:
sleep 1s 表示延遲一秒
sleep 1m 表示延遲一分鐘
sleep 1h 表示延遲一小時
sleep 1d 表示延遲一天
值得一提的是,使用 sleep 或 usleep 進行延時是會阻塞的,假如我們在一個 Shell 指令碼(姑且稱為父指令碼)中呼叫了另一個 Shell 指令碼(子指令碼),而子指令碼恰好使用了延時,那麼父指令碼也會阻塞。如果這不是你想要的效果,請往下看(合理地使用 &)。
Shell 指令碼的執行流程
Shell 是單執行緒順序執行的,要想實現“多執行緒”可以通過在後臺執行多程序的方式來實現。在 bash 中,使用後臺任務來實現任務的“多程序化”。在不加控制的模式下,不管有多少任務,全部都後臺執行。也就是說,在這種情況下,有多少任務就有多少“程序”在同時執行。
舉個栗子:
# !/bin/bash
for ((i = 0 ;i < 5 ;i ++ )); do
{
sleep 3 ;echo 1 >> aa && echo " done! "
}
done
wait
cat aa | wc - l
rm aa
上面這種情況下,程式順序執行,每個迴圈3s,共需15s左右。輸出結果如下:
$ time bash test . sh
done !
done !
done !
done !
done !
5
real 0m15 . 030s
user 0m0 . 002s
sys 0m0 . 003s
進行“多程序化”改造:
# !/bin/bash
for ((i = 0 ;i < 5 ;i ++ )); do
{
sleep 3 ;echo 1 >> aa && echo " done! "
} &
done
wait
cat aa | wc - l
rm aa
這個改造實際上就在上面基礎上多加了一個後臺執行 & 符號,此時應該是5個迴圈任務併發執行,最後需要3s左右時間。輸出結果如下:
$ time bash test . sh
done !
done !
done !
done !
done !
5
real 0m3 . 011s
user 0m0 . 002s
sys 0m0 . 004s
這裡順便說一下 wait 的作用。wait 是等待前面的後臺任務全部完成才往下執行,否則程式本身是不會等待的,這樣對後面依賴前面任務結果的命令來說就可能出錯。例如上面 wc -l
的命令就報錯:不存在 aa 這個檔案。
案例:Shell 指令碼找出某個程序並將其 kill
【test.sh】
#!/bin/bash
NAME=$1
PID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $1}'`
echo $PID
for id in $PID
do
kill -9 $id
echo "killed $id"
done
測試:為該 Shell 指令碼設定執行許可權,chmod a+x test.sh
,執行 ./test.sh 程序名
即可。
相關推薦
Shell指令碼基礎知識及案例
Shell 指令碼(即 Shell Script),Shell 指令碼類似於 Windows/Dos 下的批處理,也就是將所需的各類命令預先放入到一個檔案中,方便一次性執行的一個程式檔案,主要應用在 Linux 系統運維上,方便管理員進行設定或者管理用的。但
Linux運維之shell指令碼基礎知識
1、bash中的算術運算 let運算子 [[email protected]:vg_adn_tidbCkhsTest~/tidb-bench/sysbench]#let i=1+2 [[email protected]:vg_adn_tidbCkhsTe
SHELL指令碼------基礎知識(|||)
一、SHELL中的函式 1.語法方法1: 函式名( ) { 函式體 return n } 方法2: function 函式名( ) { 函式體  
SHELL指令碼------基礎知識(||)
一、Sed 行編輯器 一、sed: 1.用來操作純 ASCII 碼的文字 2.Sed 一次處理一行內容,處理時,把當前處理的行儲存在臨時緩衝區中,稱之為“模式空間” 3.可以指定僅僅處理哪些行,Sed 符合模式條件的處理,不符合條件的不予處理 4.處理完成之後把緩衝區的內容送往螢幕 5.接著
SHELL指令碼------基礎知識
一、shell的簡單瞭解 一、什麼是shell? shell也是作業系統中的一個軟體,它包在linux核心的外面,為使用者和核心之間的互動提供了一個介面,系統中的命令用shell去解釋shell接受系統迴應的輸出並顯示其到螢幕中。 二、什麼是shell指令碼? 1.簡單的說,當命令或
shell基礎知識及使用方法
基礎知識 shell 使用方法 shell基礎知識及使用方法 SHELL是用戶與操作系統之間完成交互式操作的一個接口程序,為用戶提供簡化了的操作。 第一代shell在上世紀70年代中於貝爾實驗室中誕生,名為bourne shell,簡稱sh,後期又衍生出多個版本,如csh,ksh等;而Lin
Spring基礎知識及入門
架構 erl struct asp spf line 依賴註入 myeclipse lin ---恢復內容開始--- 1 spring框架概述 1.1 什麽是spring Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由
linux入門基礎知識及簡單命令介紹
linux基礎linux入門基礎知識介紹1、計算機硬件組成介紹計算機主要由cpu(運算器、控制器),內存,I/O,外部存儲等構成。 cpu主要是用來對二進制數據進行運算操作,它從內存中取出數據,然後進行相應的運算操作。不能從硬盤中直接取數據。 內存從外部存儲中取出數據供cpu運存。內存的最小單位是
sql sever 基礎知識及詳細筆記
false 關系型數據庫 保存 ner 影響 平均值 code framwork 綁定 第六章:程序數據集散地:數據庫 6.1:當今最常用的數據庫 sql server:是微軟公司的產品 oracle:是甲骨文公司的產品 DB2:數據核心又稱DB2通用服務器
【Shell】-- 基礎知識(1)
com nbsp strong 設置 技術分享 lin 以及 換行符 知識 一、基礎知識 此處介紹Shell基礎知識,以及部分知識點。 概念:Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行。 分
maven基本基礎知識及命令學習-1
packaging 本地 結構 images cut 字節碼 倉庫 鏡像倉庫 apache Maven概述:Maven是很有效的項目管理工具,maven是基於項目對象模型(POM),可以通過一小段描述信息來管理項目構建、報告和文檔的軟件項目管理工具。統一管理環境,架包等。
VueJS 基礎知識及項目總結
平臺 web 應用 瀏覽器 error 很慢 匹配 ++ 描述 oos 1、build :dev-server.js 是在使用終端命令時啟動時執行的,裏面可以修改端口號 (修改第16行即可) 2、index.html 是整個文件的入口 src 裝的是你寫入的文件3、ma
MySQL備份恢復基礎知識及MySQLdump講解
mysql 備份恢復 基礎知識 mysqldump數據庫備份恢復知識要點:時間軸備份類型分類: 完全備份:備份整個數據集 增量備份:上一次完全備份,或上一次增量備份以後變化的數據的備份(還原麻煩,節省空間) 差異備份:僅備份最近一次完全備份以來變化的數據(還原簡單,空間消耗大)什
【Shell】-- 基礎知識(2)
命令別名 進程 ply exp ron -s 歷史 size 接收 1、Shell腳本運行方式 創建Shell腳本文件,一般以.sh結尾(如:example.sh) Shell腳本運行方式如下: 添加 ‘x’ 執行權限(相對或絕對路徑執行) 使用bash或sour
微軟DFS基礎知識及復制原理
微軟DFS復制原理 DFS同步原理 DFS復制 DFS是微軟Windows Server上面自帶的分布式文件共享服務,通過使用DFS,可以幫助企業通過單一路徑就可以訪問到所有共享文件夾的內容,同時可以根據客戶端登陸位置自動聯系就近的服務器,提供文件服務器負載均衡和容錯能力。DFS的主要功能分為兩大
計算機基礎知識及UNIX發展史
系統/運維 Linux Technorati Tags: UNIX發展史,存儲知識,ABI,API,開源協議TOC[-]1、計算機系統組成機構2、馮諾依曼體系結構3、服務器硬件簡介4、存儲容量換算5、存儲基礎知識6、操作系統7、開發相關概念8、UNIX發展史9、開源協議10、Linux哲學思想計算機基
第二十二課 Shell的基礎知識
2018042101一、shell介紹1、shell是一個命令解釋器,提供用戶和機器進行交互,每個用戶都可以有自己特定的shell ,2、CentOS7 默認shell為bash,還有zsh,ksh它們有細節上的差異而已,我們可以查下系統中是否存在zsh: yum list |grep zsh bash有哪
Python爬蟲基礎知識及前期準備
多多指教 arm 讀取 第一次 小項目 網信 替換 mark python爬蟲 學習爬蟲有一小段時間了,於是決定把自己學爬蟲時所學的,寫過的代碼以及看過的文檔記錄下來,權當小結。第一次寫這些,如果有錯誤,請多指教。 首先我們需要了解一下什麽是爬蟲。 根據百度百科上給出的定義
keepalive基礎知識及主備模型搭建
其中 devel ring ice inux 文件中 實現 unit emd lvs模型屬於單點故障,對real server的健康狀態檢查可以通過寫腳本實現,keepalived可以實現高可用:keepalive:vrrp協議在Linux主機上以守護進程方式的實現; 能夠
Linux防火墻基礎知識及應用;設置SNAT策略,局域網共享上網;DNAT策略,發布內部服務器
開啟 提供web服務 port 使用 配置 網頁 遵從 internet 個數 防火墻,通俗地打個比方就相當於城池周圍的護城河,開放和管理服務的提供一般電腦系統的安全主要取決於:1)第三方監控殺毒軟件 如360殺毒軟件2)系統策略 防火墻規則設定3)文件的權限設定 Lin