1. 什么是shell
命令解釋器, 用來(lái)翻譯用戶輸入的指令給內(nèi)核,內(nèi)核驅(qū)動(dòng)硬件,硬件返回給內(nèi)核,內(nèi)核面板通知
1. 1 shell 的執(zhí)行方式
- 交互式:輸入一條,返回一條
- 非交互式:需要執(zhí)行的命令寫入一個(gè)文件中,然后去執(zhí)行這個(gè)文件,所有任務(wù)完成
2. 什么是shell 腳本
- 將系統(tǒng)命令堆積在一起, 順序執(zhí)行 (簡(jiǎn)稱: 系統(tǒng)命令堆積)
- 特定的格式 + 特定的語(yǔ)法 + 系統(tǒng)的命令 = 文件 ---> shell腳本
3. shell腳本能做什么

4. 學(xué)習(xí)shell 腳本需要哪些預(yù)備知識(shí),如何才能學(xué)完shell腳本
- 熟練使用vim編輯器
- 熟練使用linux 命令
- 熟練使用linux 三劍客
如果對(duì)命令使用不夠熟練,對(duì)基本服務(wù)不能手動(dòng)大劍,那么一定學(xué)不會(huì)shell
如何學(xué)好shell腳本
基礎(chǔ)命令+基礎(chǔ)服務(wù)+經(jīng)常練習(xí)+ 思路
5. shell腳本編寫規(guī)范,shell腳本執(zhí)行方式
- 腳本存放固定目錄/scripts
- 開(kāi)頭加#!/bin/bash 作用:告訴腳本使用的是哪種命令解釋器。如不指shell,默認(rèn)以bash執(zhí)行。
- 附帶作者及版權(quán)信息
- 腳本擴(kuò)展名為*.sh
- 腳本中盡量不使用中文
- 成對(duì)的符號(hào)一次書寫完成
- 循環(huán)格式一次性輸入完成
6. 解釋器加與不加的區(qū)別 (# !/bin/bash)

bash shell_01.sh 使用bash運(yùn)行腳本
./bash shell_01.sh 直接執(zhí)行腳本


. / 方式執(zhí)行,系統(tǒng)會(huì)讀取第一行聲明的解釋器,如果不加,linux系統(tǒng)默認(rèn)使用bash,如果腳本不是bash可執(zhí)行的命令,就會(huì)報(bào)錯(cuò)
Centos 6 !/bin/bash
Centos 7 !/usr/bin/bash
補(bǔ)充:如何讓Vim編輯器自動(dòng)顯示行號(hào)
vim /etc/vimrc
在最后一行加入 set number
wq 保存退出
7. Shell 腳本變量
7.1 什么是變量
變量是shell傳遞數(shù)據(jù)的方法,簡(jiǎn)單理解,就是用一個(gè)固定的字符串,表示一個(gè)不固定的值
7.2變量命名規(guī)范
變量定義時(shí)建議使用:大寫字母、小寫字母、下劃線幾個(gè)組成 {變量名最好具備一定的含義}
不要出現(xiàn)數(shù)字開(kāi)頭:
可以使用如下的方式:
HostName=
cpu_load_ava_1=1
cpu_load_ava_5=2
cpu_load_ava_15=3注意: 等號(hào)是復(fù)制,需要注意,等號(hào)兩邊不能有空格,其次,定義的變量不要與系統(tǒng)的命令出現(xiàn)沖突
7.3 shell定義變量的方式
- 用戶自定義變量:人為定義變量名稱
自己設(shè)定的變量
- 系統(tǒng)環(huán)境變量:保存的是和系統(tǒng)操作
系統(tǒng)設(shè)置好的,可以直接調(diào)用
位置參數(shù)變量:位置參數(shù)變量,變量名不能自定義,變量作用也是固定
預(yù)定義的變量:是Bash中已經(jīng)定義好的變量,變量不能自定義,變量作用也是固定的
8. Shell 變量實(shí)踐
8.1 用戶自定義變只在當(dāng)量前shell 有效
定義變量 變量名=變量值 不能出現(xiàn) " - " 命名


想要多個(gè)窗口都讀到變量,設(shè)置為全局變量就可以想要在系統(tǒng)生效,必須寫入配置文件/etc/profile


**8.2 **
引用變量,$變量名
var_1=a1b2
echo $var_1
a1b2
8.3 查看變量
查看變量,set顯示所有變量,包括自定義變量和環(huán)境變量

8.4 取消變量,作用范圍:僅在當(dāng)前shell中有效



8.5 shell中 單引號(hào)與雙引號(hào)的區(qū)別
什么時(shí)候使用雙引號(hào)
- 字符串出現(xiàn)空格的情況需要雙引號(hào)將其作為一個(gè)整體

- 如果內(nèi)容中有命令、變量等,會(huì)先把變量、命令解析出結(jié)果,然后輸出最終內(nèi)容。
什么時(shí)候使用單引號(hào)
- 所見(jiàn)即所得,單引號(hào)中是什么就輸出什么
- 單引號(hào)會(huì)解析引號(hào)中的變量
9. 系統(tǒng)環(huán)境變量
系統(tǒng)環(huán)境變量是用來(lái)定義系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),比如每個(gè)用戶不同的家目錄(HOME)、郵件存放位置(MAIL)等
查看系統(tǒng)環(huán)境變量
export
9.1 常見(jiàn)系統(tǒng)變量
- 用戶的家目錄: $HOME
- 當(dāng)前主機(jī)名是: $HOSTNAME
- 當(dāng)前所在目錄: $PWD
- 當(dāng)前連接信息: $SSH_CONNECTION
9.2 自定義系統(tǒng)環(huán)境變量



export var_3=a1 定義系統(tǒng)環(huán)境變量 ,注意不要加上$符號(hào)
9.3 預(yù)定義變量
Bash中已經(jīng)定好的變量,名稱不能自定義,作用也是固定的

$0:當(dāng)前腳本的文件名
$n:第n個(gè)參數(shù) 第0個(gè)參數(shù)為文件名稱
$#:參數(shù)個(gè)數(shù)
$*:所有的參數(shù) 在一塊內(nèi)存中,空格間隔
$@:所有的參數(shù) 申請(qǐng)n個(gè)空間,分別存放
$?:上次命令執(zhí)行的返回值
用處
$n:在判斷用戶輸入的位置參數(shù)是什么
$#:判斷參數(shù)個(gè)數(shù)
$?:判斷命令執(zhí)行結(jié)果

$* 和 $@的區(qū)別
不加引號(hào)時(shí),二者都是返回傳入的參數(shù)
加了引號(hào)后,
$* 把參數(shù)作為一個(gè)字符串整體(單字符串)返回
$@ 把每個(gè)參數(shù)作為一個(gè)一個(gè)的字符串進(jìn)行返回