Shell編程實戰

爲何要學習Shell編程

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

一個合格的Linux系統管理員都必須熟練編寫Shell腳本語言,從而提高運維人員的工做效率,減小沒必要要的重複性工做。python

學習Shell所需的基礎知識

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

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

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

shell和其餘腳本語言不一樣,如python,Shell缺乏能夠直接使用的外部函數庫,所以Linux系統的命令就能夠當作Shell的函數庫!vim

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

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

什麼是Shell

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

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 root@192.168.11.11
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"

 獲取字符串長度

[root@oldboy_python ~ 13:36:35]#str='abc'
[root@oldboy_python ~ 13:36:49]#echo ${#str}
3

切片操做

左閉又開規則

[root@oldboy_python ~ 13:39:45]#str='I am chaoge,hello world!'
#取出0和10索引的字符
[root@oldboy_python ~ 13:40:42]#echo ${str:0:11}
I am chaoge

查找字符索引

[root@oldboy_python ~ 13:45:02]#str='I am chaoge,hello world!'
[root@oldboy_python ~ 13:46:20]#echo `expr index "$str" e`
11
相關文章
相關標籤/搜索