一、SHELL軟件概念和應(yīng)用場(chǎng)景1) 學(xué)習(xí)Linux技術(shù),不是為了學(xué)習(xí)系統(tǒng)安裝、命令操作、用戶權(quán)限、配置IP、網(wǎng)絡(luò)管理,學(xué)習(xí)Linux技術(shù)重點(diǎn):基于Linux系統(tǒng)部署和維護(hù)各種應(yīng)用軟件、程序(Apache、MYSQL、Redis、PHP、Nginx、Tomcat等); 2) 學(xué)習(xí)Linux技術(shù),如果不懂SHELL編程,可以說(shuō)不懂Linux,要想實(shí)現(xiàn)月薪過萬(wàn),SHELL編程技能是運(yùn)維人員必備的,那么SHELL編程到底是什么呢? 3) 通過Xshell和CRT遠(yuǎn)程連接Linux操作系統(tǒng),默認(rèn)會(huì)登陸到命令行終端,命令行終端提示符#、$,為什么要登陸命令行呢?其實(shí)可以直接登陸圖形界面,最終用戶是為了什么?為了能夠控制和管理操作系統(tǒng)。 4) 而Linux操作系統(tǒng)核心是Linux內(nèi)核(數(shù)以萬(wàn)計(jì)的代碼組成的),默認(rèn)用戶是不能直接操作Linux內(nèi)核的,借助第三方的工具:命令行、圖形界面UI,默認(rèn)登陸到Linux命令行終端,也稱為SHELL命令行終端; 5) 用戶基于SHELL命令行終端,可以輸入各種Linux指令,當(dāng)我們?cè)赟HELL命令行終端輸入df –h命令按下Enter鍵時(shí),Linux指令傳遞給SHELL(軟件程序),經(jīng)過SHELL解析,并且將解析之后內(nèi)容傳遞給Linux內(nèi)核,Linux內(nèi)核接收以后會(huì)處理,處理完畢之后會(huì)將數(shù)據(jù)內(nèi)容返回給SHELL,由SHELL經(jīng)過解析最 終返回給用戶終端;
6) 通常將SHELL稱為L(zhǎng)inux內(nèi)核的外殼,用于連接用戶和Linux內(nèi)核之間橋梁,將SHELL稱為中間件,SHELL外殼程序有很多種類和版本,查看Linux操作系統(tǒng)SHELL類型和SHELL版本: #查看Linux默認(rèn)的SHELL種類; echo $SHELL #查看默認(rèn)的SHELL種類版本; /bin/bash --version
7) SHELL和SHELL編程概念有什么區(qū)別呢?
8) SHELL編程的核心思想? SHELL編程是將Linux單個(gè)指令或者多個(gè)指令按照一定的邏輯關(guān)系和順序堆積在文本文件(腳本文件)中,文本文件中的指令會(huì)通過SHELL解釋器去解析,最終實(shí)現(xiàn)某個(gè)具體的功能和需求; 9) SHELL編程的產(chǎn)物是SHELL腳本文件(以.sh結(jié)尾命名的),而SHELL腳本文件是由單個(gè)命令或者多個(gè)命令堆積而成的,SHELL腳本中命令會(huì)通過SHELL解釋器去解析和執(zhí)行; 10) SHELL編程的意義和用途?
11)Linux Shell種類非常多,常見的SHELL如下:
shell和shell編程的區(qū)別
二、SHELL腳本及Hello World要熟練掌握Shell編程語(yǔ)言,需要大量的練習(xí),初學(xué)者可以用Shell打印“Hello World”字符,寓意著開始新的啟程! Shell腳本編程需要如下幾個(gè)事項(xiàng):
如下為第一個(gè)Shell編程腳本,腳本名稱為:first_shell.sh,代碼內(nèi)容如下:
#!/bin/bash
#This is my First shell
#By author jfedu.net 2017
echo “ Hello World ”
First_shell.sh腳本內(nèi)容詳解如下:
#!/bin/bash # 固定格式,定義該腳本所使用的Shell類型;
#This is my First shell #號(hào)表示注釋,沒有任何的意義,SHELL不會(huì)解析它;
#By author jfedu.net 2017 #表示腳本創(chuàng)建人,#號(hào)表示注解;
echo “Hello World !” #Shell腳本主命令,執(zhí)行該腳本呈現(xiàn)的內(nèi)容。
1、Shell腳本編寫完畢,如果運(yùn)行該腳本,運(yùn)行用戶需要有執(zhí)行權(quán)限,可以使用chmod o+x first_shell.sh賦予可執(zhí)行權(quán)限。
2、然后./first_shell.sh執(zhí)行即可,還可以直接使用命令執(zhí)行: /bin/sh first_shell.sh直接運(yùn)行腳本,不需要執(zhí)行權(quán)限,最終腳本執(zhí)行顯示效果一樣。
3、初學(xué)者學(xué)習(xí)Shell編程,可以將在Shell終端運(yùn)行的各種命令依次寫入到腳本內(nèi)容中,可以把Shell腳本當(dāng)成是Shell命令的堆積。
三、Shell編程之變量詳解Shell編程是非類型的解釋型語(yǔ)言,不像C++、JAVA語(yǔ)言編程時(shí)需要事先聲明變量,Shell給一個(gè)變量賦值,實(shí)際上就是定義了變量,在Linux支持的所有shell中,都可以用賦值符號(hào)(=)為變量賦值,Shell變量為弱類型,定義變量不需要聲明類型,但在使用時(shí)需要明確變量的類型,可以使用Declare指定類型,Declare常見參數(shù)有:
+/- "-"可用來(lái)指定變量的屬性,"+"為取消變量所設(shè)的屬性;
-f 僅顯示函數(shù);
r 將變量設(shè)置為只讀;
x 指定的變量會(huì)成為環(huán)境變量,可供shell以外的程序來(lái)使用;
i 指定類型為數(shù)值,字符串或運(yùn)算式。
Shell編程中變量分為三種,分別是系統(tǒng)變量、環(huán)境變量和用戶變量,其中系統(tǒng)變量在對(duì)參數(shù)判斷和命令返回值判斷時(shí)使用,而環(huán)境變量則主要是在程序運(yùn)行時(shí)需要設(shè)置,用戶變量又稱為局部變量,多使用在Shell腳本內(nèi)部或者臨時(shí)局部使用。 Shell變量名在定義時(shí),首個(gè)字符必須為字母(a-z,A-Z),不能以數(shù)字開頭,中間不能有空格,可以使用下劃線(_),不能使用(-),也不能使用標(biāo)點(diǎn)符號(hào)等。
例如定義變量A=jfedu.net,定義這樣一個(gè)變量,A為變量名,jfedu.net是變量的值,變量名有格式規(guī)范,變量的值可以隨意指定。變量定義完成,如需要引用變量,可以使用$A。
如下腳本var.sh腳本內(nèi)容如下:
#!/bin/bash
#By author jfedu.net 2017
A=123
echo “Printf variables is $A.”
執(zhí)行該Shell腳本,結(jié)果將會(huì)顯示:Printf variables is jfedu.net。Shell常見的系統(tǒng)變量、環(huán)境變量、用戶變量詳解如下:
1)SHELL編程常見系統(tǒng)變量
$0 當(dāng)前腳本的名稱;
$n 當(dāng)前腳本的第n個(gè)參數(shù),n=1,2,…9;
$* 當(dāng)前腳本的所有參數(shù)(不包括程序本身);
$# 當(dāng)前腳本的參數(shù)個(gè)數(shù)(不包括程序本身);
$? 命令或程序執(zhí)行完后的狀態(tài),返回0表示執(zhí)行成功;
$$ 程序本身的PID號(hào)。
2)SHELL編程常見環(huán)境變量
PATH 命令所示路徑,以冒號(hào)為分割;
HOME 打印用戶家目錄;
SHELL 顯示當(dāng)前Shell類型;
USER 打印當(dāng)前用戶名;
ID 打印當(dāng)前用戶id信息;
PWD 顯示當(dāng)前所在路徑;
TERM 打印當(dāng)前終端類型;
HOSTNAME 顯示當(dāng)前主機(jī)名。
3)SHELL編程用戶變量
A=jfedu.net 自定義變量A;
N_SOFT=nginx-1.12.0.tar.gz 自定義變量N_SOFT;
BACK_DIR=/data/backup/ 自定義變量BACK_DIR;
IP1=192.168.1.11 自定義變量IP1;
IP2=192.168.1.12 自定義變量IP2。
創(chuàng)建Echo打印菜單Shell腳本,腳本代碼如下:
#!/bin/bash
#auto install httpd
#By author jfedu.net 2017
echo -e '\033[32m-----------------------------\033[0m'
FILE=httpd-2.2.31.tar.bz2
URL=http://mirrors.cnnic.cn/apache/httpd/
PREFIX=/usr/local/apache2/
echo -e "\033[36mPlease Select Install Menu:\033[0m"
echo
echo "1)官方下載Httpd文件包."
echo "2)解壓apache源碼包."
echo "3)編譯安裝Httpd服務(wù)器."
echo "4)啟動(dòng)HTTPD服務(wù)器."
echo -e '\033[32m-----------------------------\033[0m'
sleep 20
運(yùn)行腳本,執(zhí)行結(jié)果如圖17-2所示:
|
|