1. 程式人生 > >Shell編程實戰

Shell編程實戰

好的 The 安裝 port 關鍵字 反饋 可執行 不能 開機

為什麽要學習Shell編程

Shell腳本語言是實現Linux/Unix系統管理及自動化運維所必須的重要工具,Linux系統的底層以及基礎應用軟件的核心大都涉及Shell腳本的內容。

一個合格的Linux系統管理員都必須熟練編寫Shell腳本語言,從而提升運維人員的工作效率,減少不必要的重復性工作。

學習Shell所需的基礎知識

熟練使用VIm編輯器,熟悉SSH終端等配置

在Linux下開發shell腳本用的最多的就是vim編輯器,熟練使用vim可以使得shell腳本開發事半功倍!

有一定的Linux命令基礎,熟練掌握80個命令以上

shell和其他腳本語言不同,如python,Shell缺少可以直接使用的外部函數庫,因此Linux系統的命令就可以當做Shell的函數庫!

熟悉常見Linux服務部署,優化,分析與排錯

學習Shell直接的目的是在工作中對系統以及服務進行自動化管理,因此如果不熟悉服務操作,使用shell也就沒有意義了

什麽是Shell

技術分享圖片

Shell存在於操作系統的最外層,負責與用戶直接對話,把用戶的輸入解釋給操作系統,處理操作系統的輸出結果,然後反饋給用戶。

Shell是一個命令解釋器,它的作用是解釋並執行用戶輸入的命令和程序等,用戶每輸入一條命令,Shell解釋器就執行一條,存在一種交互的方式。

從開機準備輸入用戶名和密碼,到登錄成功,所有的操作都是Shell解釋並執行的。

什麽是Shell腳本

當命令或者程序語句不是在命令行中執行,而是通過一個程序文件來執行時,這個程序就稱作Shell腳本。

一個簡單的Shell腳本

清除/var/log下的messages日誌文件

把所有命令放入一個文件,堆積起來後就是一個腳本文件!註意文件的可執行權限,與用戶身份

#清除腳本日誌
cd /var/log
cat /dev/null > messages
echo "Logs cleaned up . done"

Shell腳本語言的種類

Shell腳本語言是弱類型語言(無須定義變量的類型即可使用)
在Linux中有兩大Shell,一是Bourne shell,二是C shell
我們需要知道的就是標準的Bourne Again shell(bash)所取代
查看CentOS 7系統的Shell

技術分享圖片

其他的腳本語言

php
Perl
Python

語言選擇

Shell腳本語言優勢在於處理系統底層的業務,基於linux命令處理也是最快的,常用語開發自動化安裝,監控報警,軟件啟動等腳本。

第一個Shell腳本與hello world

腳本開頭

一個規範的腳本文件會在第一行指出由哪個程序來執行腳本的內容,必須位於第一行!!!如果你不加默認也會交給bash解釋,良好的編程習慣,最好加上開頭解釋器語言標識
#
!/bin/bash
#!/usr/bin/env python

執行Shell腳本的方式

bash 腳本名
sh    腳本名
此方法是腳本沒有可執行權限時,或者文件頭沒指定解釋器時用的方法

path/scriptName
./scriptName
此方法需要腳本有可執行權限,chmod +x scriptName

source scriptName
. scriptName
加載並執行腳本文件中的命令和語句
[root@oldboy_python /tmp 11:10:08]#sh test.sh
chaoge nb
[root@oldboy_python /tmp 11:10:18]#cat test.sh
#!/bin/bash
echo chaoge nb
[root@oldboy_python /tmp 11:10:21]#. test.sh
chaoge nb
[root@oldboy_python /tmp 11:10:33]#source  test.sh
chaoge nb
#添加可執行權限給test.sh
chmod +x test.sh
./test.sh

變量

環境變量一般指的是export內置命令導出的變量,用於定義SHell的運行環境。
Shell通過環境變量來確定命令提示符,也就是超哥前面說的PS1變量
環境變量可以在命令行中設置和創建,但是用戶退出命令行時變量值就會丟失,因此可以寫入/etc/profile文件中,每次用戶登錄時,變量都會被初始化!
環境變量名字均大寫,用env查看

設置登錄的提示

[root@oldboy_python ~ 11:21:51]#cat /etc/motd
welcome chaoge bakcome~~~~~~~~~

yudanL:~ yuchao$ ssh [email protected]
Last failed login: Wed Aug 29 11:20:20 CST 2018 from 111.231.199.24 on ssh:notty
There were 25 failed login attempts since the last successful login.
Last login: Wed Aug 29 10:45:51 2018 from 223.72.74.11
‘welcome chaoge bakcome~~~~~~~~~`‘

定義變量

變量定義的註意點

  • 變量名和等號之間不能有空格
  • 命名只能用英文字母,數字,下劃線,首個字符不能用數字
  • 不能用標點符號
  • 不能用關鍵字
name=chaoge
echo $name
echo ${name} #幫助解釋器識別變量的邊界
#變量重新賦值
name=‘chaogenb‘

設置只讀變量

[root@oldboy_python ~ 11:29:31]#readonly name
[root@oldboy_python ~ 11:30:27]#name=chaogenb3
-bash: name: 只讀變量

刪除變量

unset name

變量類型

  • 局部變量 在腳本或命令中定義,僅在當前shell有效
  • 環境變量 所有的程序,shell程序都能訪問環境變量
  • shell變量 特殊變量 既有環境變量 又有局部變量

字符串

字符串可以用單引號,也可以雙引號,也可以沒引號

[root@oldboy_python ~ 11:42:42]#addr=shahe
[root@oldboy_python ~ 11:44:55]#echo $addr
shahe

單引號的任何字符串都會原樣輸出,單引號字符串中的變量無效

單引號字符串不能出現單一的單引號,轉義符也不可用,可用作字符串拼接

雙引號

雙引號裏可以用變量

雙引號可以有轉義符

[root@oldboy_python ~ 11:45:01]#addr=changpingshahe
[root@oldboy_python ~ 11:48:06]#name=yuchao
[root@oldboy_python ~ 11:49:00]#message="Hello,${name},Your addr is \"${addr}\" "
[root@oldboy_python ~ 11:50:05]#echo $message
Hello,yuchao,Your addr is "changpingshahe"


Shell編程實戰