01 Shell指令碼程式設計入門知識

2022-06-18 18:54:08 字數 4391 閱讀 7283

linux shell語言使用背景

目前全球正處於「網際網路+」的時代,各行各業都與網際網路掛鉤,比如網際網路+教育、網際網路+銷售等等。幾乎所有的商品、服務網上都能找得到,而支撐網際網路的幕後支柱就是linux系統。linux運維技術成為it技術人員的必備技能。

想要降低linux運維成本就要進行運維自動化,進行自動化就需要指令碼語言。時下linux系統最流行的指令碼語言就是shell和python。python的流行時間短,學習成本高。而shell幾乎是所有運維公司都必須使用的自動化語言,在很多任務作環節中必不可少。

學習shell程式設計最好有相關基礎,比如vim編輯器、ssh終端、linux命令(重點掌握正規表示式和grep、sed、awk命令)、linux網路部署、日誌分析排錯、網路服務等。

常見網路服務型別:crond、rsync、inotify、nginx、php、mysql、keepalived、memcached、redis、nfs、iptables、svn、git等。

其他指令碼語言

php網頁程式語言。perl語言(已成為歷史)。python。

linux命令在shell程式設計中的作用

每種語言都有自帶的函式庫,唯獨shell沒有,shell使用linux命令,可以把linux命令看作是shell的函式庫。

什麼是shell

定義:shell是linux/unix命令直譯器,負責將命令翻譯給linux系統核心並返回運算結果,是人機互動的中介介面。

shell分類:命令列shell(cli shell),圖形化shell(gui shell)。圖形化shell就是用滑鼠點點點,有桌面介面的那種。命令列shell類似於windows中的dos。

命令列shell分類:主要有兩大類,b shell系列和c shell系列,b shell用於linux系統,c shell用於unix系統。

b shell分類:包括bourne shell(sh)、korn shell(ksh)、bourne again shell(bash)三種型別。重點掌握bash,它是各種linux發行版系統預設的shell,是目前主流linux shell。bash集合了ksh和sh的優點,而ksh是由sh發展出來的。

c shell又包括csh、tcsh兩種型別。tcsh是csh的增強版,已運用於蘋果電腦mac系統,但目前通用的還是csh。

乙個系統可以儲存了多個cli shell,centos 6檢視系統有哪些shell可以使用命令:cat /etc/shells

命令執行方式分類

互動式、批量式。(互動式就是一次只能輸入一條命令,機器返回對應結果,再輸入一條命令再返回一次結果。批量式就是一次寫一整套指令碼命令,然後機器一次性執行完。命令列shell中使用linux命令的執行方式就是互動式,而shell指令碼當然是使用批量式執行)

什麼是shell指令碼

定義:shell指令碼是採用某種linux shell對應的命令以及操作語句編寫的linux系統批量操作程式。

(windows中用dos直譯器寫的批量操作檔案是.bat檔案)

(linux中用shell直譯器寫的批量操作檔案就是shell指令碼,字尾為.sh)

(所有程式語言都是由庫函式和語句組成,而語句又由關鍵字和變數組成。至於表示式,不算在語言範疇中,比如1+2誰都能執行,屬於哪門語言?)

shell指令碼內容:和其他計算機語言類似,shell指令碼語言包括兩部分,linux命令和控制語句。而控制語句又包括變數定義語句、賦值語句、輸入/輸出語句、分支語句、迴圈語句。

shell指令碼語言:是一種弱型別,解釋型語言。

shell指令碼語言優勢:與系統更相容,命令多,適合處理偏系統底層業務。簡單、易用、高效。

shell指令碼建立和執行echo "alias vi='vim'" >>/etc/profile

source /etc/profile

指令碼的第一行

終端使用命令cat 路徑可以編輯對應檔案,新增單行**。enter後自動儲存。或者vi別名開啟vim編輯器開始寫指令碼。

一般指令碼的第一行是用來指定用哪個shell來執行指令碼的。選擇輸入下面任意一行**指定使用哪個shell。

#!/bin/bash

#!/bin/sh

#!/usr/bin/awk

#!/bin/sed

#!/usr/bin/tcl

#!/usr/bin/expect

#!/usr/bin/perl

#!/usr/bin/env python

其中expect是互動式語言直譯器,perl是perl語言直譯器,env python是python直譯器。

如果第一行不指定shell,系統預設使用bash,為了規範,請指定shell。

如果想讓指令碼在多種shell上執行,第一行可以不指定shell。執行時先進入對應的shell,在shell中開啟指令碼,這樣也可以。

#!字元又稱幻數,核心會讀取#!後的路徑選擇shell。

為什麼一定要在第一行寫?我們都知道#後面的內容是注釋,第一行除外,所以幻數必須放在指令碼頂端第一行,若上面**放在其他行則無效,變成注釋。

附:檢視bash版本。終端輸入:

bash --version

檢測bash是否有漏洞。終端輸入:

env x='() ; echo be careful' bash -c "echo this is a test"

若顯示be careful this is a test,則需要公升級bash。公升級方法是分別輸入下面兩條命令:

yum -y update bash

rpm -qa bash

若沒有顯示be careful,不需要公升級bash。

bash script_name

使用這種方法不僅指定了shell,也避免了指令碼沒有執行許可權的問題。

方法二是終端輸入命令「路徑/指令碼名或 ./指令碼名」。路徑可以是絕對路徑或相對路徑。

但這種方法執行的指令碼必須要有執行許可權。有的人定時執行指令碼,結果指令碼沒有執行許可權導致到時間沒執行,造成重大損失。

給指令碼新增執行許可權使用命令:

chmod +x 指令碼名

方法三是「source 指令碼名」 或「. 指令碼名」,點後要有空格。

source或點方法不同於其他方法。方法

一、二(shell和路徑)執行指令碼系統會開啟乙個新的shell程序,執行完就關閉指令碼檔案,指令碼資料不會留在原shell程序上。

而使用source和點執行的指令碼不會開啟新的程序,直接在當前shell終端程序中執行,執行完後關閉檔案但不關閉當前shell程序,資料依然存在於當前shell中。

方法三與方法

一、二不同的舉例說明(#後是注釋):

[root@andy ~]# cat test.sh #cat命令檢視test檔案,裡面有條輸出語句

echo "userdir=`pwd`"

[root@andy ~]# bash test.sh #使用「shell 指令碼」的格式執行指令碼。

/home/root #執行成功,輸出變數代表的pwd路徑

[root@andy ~]# echo $userdir #此時已執行完畢,嘗試再輸出變數

#結果為空

[root@andy ~]# source test.sh #採用「source 指令碼」的格式執行指令碼

/home/root #執行成功

[root@andy ~]# echo $userdir #此時已執行完畢,嘗試再輸出變數

/home/root #再次顯示變數內容

所以,記住source和 . 點方法執行指令碼是在當前shell中進行。執行完後變數都還在shell中。

第四種方法是:「sh《指令碼名」 或「cat 指令碼名|sh」

這種方法不常用,這是個奇招,有時能少寫幾個迴圈,但不標準,不推薦。

系統執行指令碼的過程是先查詢環境變數env,然後env變數依次載入幾個環境檔案後,開始執行指令碼。

執行順序:從上到下,從左到右。若執行中遇到子指令碼呼叫語句,則先執行完子指令碼,再返回繼續執行父指令碼。

shell指令碼開發規範

第一行指定shell。

指令碼開頭加版本、版權等資訊。

盡量不使用中文。

指令碼檔案的字尾名是 .sh。

指令碼檔案儲存在固定的路徑下,如 /server/scripts。

書寫技巧:

成對的符號先打出來再在裡面新增內容。

流程控制語句先寫完格式,再新增內容。

適當使用縮排使**易讀。

常規字串用雙引號,強引用用單引號,引用命令用反引號。

Shell指令碼程式設計01 基礎知識

shell指令碼與windows dos下的批處理相似,就是將各類命令預先放入到乙個檔案中,然後執行該檔案,便可以達到與批處理類似的功能,主要是方便管理員進行設定或者管理用的。換句話來說,shell指令碼是利用shell的功能所寫的乙個程式,這個程式使用純文字檔案,將一些shell的語法與指令寫在裡...

shell指令碼程式設計入門

運維工程師 shell指令碼程式設計 shell 命令解析器 用於訪問核心 作用 命令解析 呼叫相應功能 首行 usr bin sh 指定解析器 前為未指定解析器,使用預設解析器 用處 自動化運維 用乙個步驟代替別人的十幾個步驟 使用指令碼 實現自動化 機器代替自己來做一些操作 s 件中需要 注發布...

Shell指令碼程式設計入門

最近在學習shell指令碼,兩個地方值得注意。1.shell中的運算 a 7b 8 let c a b c a b c a b c expr a b 等價於 參考 03 linux shell 變數 數學 運算 2.shell中的exec和重定向 我寫了乙個簡單的指令碼copy.sh,如下 bin ...