1. 爲何學習Shell
1)減小重複性工做
2)減小出錯
3)批量管理服務器
4)提升工做效率
5)懶
6)安裝系統
7)初始化操做(優化SSHD、禁止開機服務啓動、安裝基礎軟件,iptables,selinux等等)
8)安裝服務、LNMP LAMP (nginx、PHP、MySQL、Tomcat、Keepalived、NFS、Rsync、Zabbix、redis等等)
9)服務的配置和啓動,Python服務啓停方式 python3.5 test.py IP 域名
10)代碼上線
11)監控(框架、端口、進程、流量 cacti)
12)日誌切割、日誌分析(三劍客 grep sed awk)、安全(ELK)
2. 學習Shell須要的基礎知識
1) 熟練掌握基礎命令
2)編程思惟
3)熟練掌握VIM
4)三劍客sed grep awk *****python
3. 如何學好Shell(包含了哪些東西)
1)環境變量
2)條件表達式
3)if判斷語句
4)for循環語句
5)while循環語句
6)case語句
7)循環控制命令 continue break exit
8)讀懂編程-框架-思考-本身練習-總結-編程思路(積累)
注意事項:不能拿別人的來用linux
2、初步認識Shell
1. 什麼是Shell
1)Shell是命令解釋器、解釋咱們輸入的命令和程序
2)Shell交互式模式 Shell等待咱們的輸入、會執行咱們的命令反饋結果
3)Shell非交互模式 Shell不與咱們交互、直接讀取咱們文件內或程序內的命令
2. 什麼是Shell腳本
1)就是把Shell可執行命令放入文件裏,條件表達式、判斷循環等等
3. 建立Shell腳本(規範)
1)路徑統一(自動化)(log存放的位置、程序安裝位置)
/server/scripts/
2)開頭寫解釋器註釋
頂頭寫註釋#!/bin/bash,不能寫在後面,下面的註釋是不執行,是給咱們看的,註釋還能夠寫在命令行的後面與命令同行
3)腳本名以.sh結尾
4)腳本內寫做者版本
#Version V1.0
#Author Lizhenya
#Create Time 2018-11-05
#QQ:5555555
#countnginx
5)每一個段的註釋
6)註釋儘可能不用中文
7)成對的符號要一次性書寫
8)循環語句一次性書寫完畢
3、環境變量
1.什麼是環境變量
1)x=1 y=x+10 y=? x 變量 等號是賦值 等號右邊的變量的值
2)等號後面一堆的內容,用一個名字來代替叫作變量
3)環境變量以生存週期來分類
1. 臨時性環境變量 export,關閉shell、變量失效
export lizhenya=test
echo $lizhenya
exit
echo $lizhenya
2. 永久環境變量 須要更改配置文件/etc/profile、永久生效
4)環境變量生效的順序
1. /etc/profile ~/.bash_profile ~/.bashrc /etc/bashrcredis
2.定義環境變量
1) 變量名字的寫法 字母 數字 下劃線的組合,儘可能以字母開頭、不能以數字開頭,等號兩邊不能有空格,名字的寫法
1. lizhenya=test
2. LizhenYa=test 大駝峯語法
3. lizhenYa=test 小駝峯語法
3.環境變量三種定義方式
1)數字變量如何定義 lizhenya=123 # 數字必須是連續的
2)字符串變量如何定義 lizhenya="I am lizhenya teacher" # 默認就加雙引號
lizhenya='I am lizhenya teacher' # 所見即所得、定義什麼值輸出什麼值
[root@m01 ~]# lizhenya=I am lizhenya
-bash: am: 未找到命令
[root@m01 ~]# lizhenya="I am lizhenya"
[root@m01 ~]# echo $lizhenya
I am lizhenyashell
3)命令變量如何定義 lizhenya=`date` # 反引號 解析命令
4.Shell特殊位置環境變量
$0 # 腳本名稱、若是你的腳本全路徑執行,帶全路徑腳本名
$n # 表明了傳參的參數 $0 腳本名稱,大於9的數字用{10}括起來
$# # 表明了腳本全部傳參的個數
$* # 腳本中全部傳參的參數,不加雙引號和$@同樣,加了雙引號把全部的參數做爲一個總體輸出
$@ # 腳本中全部傳參的參數,不加雙引號和$*同樣,加了雙引號把傳參的參數做爲單個字符串輸出
set -- "I am" lizhenya teacher
[root@m01 ~]# for i in "$*";do echo $i;done
I am lizhenya teacher
[root@m01 ~]# for i in "$@";do echo $i;done
I am
lizhenya
teacher
-------
$* 爲 「1 2 3」(一塊兒被引號包住)
$@ 爲 「1」 「2」 「3」 (分別被包住)
$? # 表明了上一次命令執行的結果,0爲成功,非零爲失敗
$$ # 獲取當前腳本的PID
$! # 獲取上一個腳本的PID
5.變量子串
1. # # 獲取字符串的長度
[root@m01 ~]# echo ${#oldboy}
2. : # 字符串切片
3. 擴展題:如何取字符串的長度?
1.echo ${#oldboy}
2.echo $oldboy|wc -L
3.expr length "${oldboy}"
4.echo $oldboy|awk '{print length($0)}'
4. 取小於3的字符串編程