1. 程式人生 > >shell腳本介紹,shell腳本結構和執行方式,date命令的用法,shell腳本中的變量簡介

shell腳本介紹,shell腳本結構和執行方式,date命令的用法,shell腳本中的變量簡介

linux 操作系統 centos shell腳本

筆記內容:

  • 20.1 shell腳本介紹

  • 20.2 shell腳本結構和執行

  • 20.3 date命令用法

  • 20.4 shell腳本中的變量

筆記日期:2017-11-21


20.1 shell腳本介紹

技術分享圖片

Shell Script,Shell腳本與Windows/Dos下的批處理相似,也就是用各類命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的。但是它比Windows下的批處理更強大,比用其他編程程序編輯的程序效率更高,它使用了Linux/Unix下的命令。

換一種說法也就是,shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在裏面,然後用正規表示法,管道命令以及數據流重導向等功能,以達到我們所想要的處理目的。

更明白地來說,shell script就像早期dos年代的.bat,最簡單的功能就是將許多指令匯整寫一起,讓使用者很容易地就能夠一個操作執行多個命令,而shell script更是提供了數組,循環,條件以及邏輯判斷等重要功能,讓使用者可以直接以shell來寫程序,而不必使用類似C程序語言等傳統程序編寫的語法。


概念區別:

shell和shell腳本有什麽區別?確切一點說,Shell就是一個命令行解釋器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。它為用戶提供了一個向Linux發送請求以便運行程序的接口系統級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。 Shell本身是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令型語言,又是一種程序設計語言(就是你所說的shell腳本)。作為命令型語言,它互動式地解釋和執行用戶輸入的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高階語言中才具有的控制結構,包括循環和分支。它雖然不是 Linux系統內核的一部分,但它調用了系統內核的大部分功能來執行程序、創建文檔並以並行的方式協調各個程序的運行。


Shell腳本最重要的一點是可以批量去執行Linux中的命令,這樣的話就可以實現自動化運維。例如有一個需求,是要讓你在淩晨3點的時候進行數據的備份,並且把大於50M的備份文件進行壓縮。如果沒有shell腳本的情況下,你要完成這個需求就只能淩晨3點爬起來敲命令。使用shell腳本的情況下,我只需要把命令寫進腳本文件裏,然後再設置一個任務計劃,讓系統在淩晨3點時自動執行這個腳本文件,還不是美滋滋。所以shell腳本不僅能夠提升運維效率,還可以讓我們的工作沒有那麽苦逼。




20.2 shell腳本結構和執行

技術分享圖片

Shell腳本的第一行必須是:#!/bin/bash,"#!" 是一個約定的標記,後面跟著的/bin/bash是告訴系統這個腳本需要使用/bin/bash解釋器來執行,即使用哪一種Shell。例如像python腳本就不一樣了:#!/usr/bin/env python,因為不同語言所編寫的腳本對應的解釋器都不一樣,但是都需要使用 "#!" 來作為標記。簡單來說就是告訴系統這是一個什麽語言寫的腳本,是python是shell或者是其他的腳本語言所寫的,然後系統才能使用相應的解釋器去執行這個腳本。不過如果這個shell腳本是在本機執行的話,倒是可以省略掉:#!/bin/bash,因為能夠識別本機的命令,但是如果到另一臺機器就不一定能夠執行了,所以文件的第一行才要寫這樣的聲明。

Shell腳本的文件名稱是以.sh為後綴,用於區分這是一個shell腳本,shell中的註釋符是井號“#”,和其他編程語言一樣,註釋的那一行內容不會被解釋器執行,但是要註意區別“#!”和“#”,前者是標記,後者才是註釋符。



編寫第一個shell腳本:

既然知道shell腳本的基本結構後,我們來編寫第一個shell腳本吧:

vim Hello.sh


腳本內容如下:

技術分享圖片


執行shell腳本的方法有三種:

sh Hello.sh

chmod a+x Hello.sh; ./Hello.sh

bash Hello.sh

技術分享圖片


第二種執行方法是給這個Hello.sh的腳本文件加上了可執行權限,所以可以當做一個二進制文件直接執行:

技術分享圖片


sh和bash實際上是同一個命令,因為sh是bash的軟連接文件:

技術分享圖片


要註意的是,#!/bin/bash寫在文件的第一行才是被當做聲明,如果寫了兩行#!/bin/bash,那麽第二行就會被當做註釋:

技術分享圖片


將系統命令寫在腳本裏就會被批量執行:

技術分享圖片


運行結果:

技術分享圖片


查看腳本執行過程 bash -x Hello.sh:

技術分享圖片

每一個“+”代表執行的命令,後面跟著命令的執行結果。


查看腳本是否語法錯誤 bash -n Hello.sh:

技術分享圖片

沒有任何的輸出就代表這個腳本沒有語法錯誤。

例如我把故意把腳本語法寫錯:

技術分享圖片

如圖,就會提示語法錯誤,並且還能告訴你錯誤出現在文件的第幾行。

但是要註意的是,這只是檢查腳本的語法錯誤,如果你系統命令寫錯了,是不會被檢查到的。




20.3 date命令用法

技術分享圖片

date是一個與時間日期相關的命令,如果直接使用的話,是顯示當前系統的日期時間:

技術分享圖片


date命令在shell腳本中作用很大,例如我在備份某個文件或者記錄某些日誌信息的時候,就可以使用這個命令給這些備份文件或日誌信息標記一個時間。


以下介紹date命令的一些常見用法:

  1. 使用時間符號指定一個日期格式輸出當前的年月日:

技術分享圖片

關於表示時間符號的解釋:

%Y 4位的年份(Year)

%y 2位的年份

%M 表示當前的分鐘(Minute)

%m 表示當前的月份(Month)

%D 以2位的格式輸出當前的年月日

%d 表示當前的日期(Date)

%F 輸出當前的年月日,以 - 為分隔

%H 輸出當前的小時時間

%h 輸出當前的月份

%s 輸出時間戳

%S 輸出秒

%T 輸出當前時間,以 : 為分隔

%W 輸出本周是今年的第幾周

%w 輸出本周是這個月的第幾周


  1. 輸出以冒號為分隔的時間:

技術分享圖片


  1. 把時間戳轉換成當前日期:

技術分享圖片


  1. 打印一天後的日期:

date -d "+1 day" +%F


  1. 打印一天前的日期:

date -d "-1 day" +%F


  1. 打印一個月前的日期:

date -d "-1 month" +%F


  1. 打印一分鐘前:

date -d "-1 min"


8. 打印一年前的日期:

date -d "-1 years" +%F


9. 打印一小時前:

date -d "-1 hour" +%T


10. 把一個日期轉換成時間戳:

date +%s -d "2017-09-06 06:52:16"


另一個與時間相關的命令:cal,cal命令可以顯示日歷:

技術分享圖片






20.4 shell腳本中的變量

技術分享圖片

shell腳本中的變量和其他編程語言中的變量含義是一樣的,都是用來存儲一個數據,然後使用變量名就可以進行調用了,shell腳本的語法和其他腳本的語法類似,都不需要使用分號作為語句的結束。

shell腳本定義變量的規則:

  • 首個字符必須為字母(a-z,A-Z)。

  • 中間不能有空格,可以使用下劃線(_)。

  • 不能使用標點符號。

  • 不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。


定義一個變量:

a=10

name=”lisi”


調用變量時需要在變量名前面加上$:

echo $a

echo $name


只讀變量:

使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。

下面的例子嘗試更改只讀變量,結果報錯:

技術分享圖片


運行腳本,結果如下:

技術分享圖片



刪除變量:

使用 unset 命令可以刪除變量裏的數據。語法:

unset name


示例:

技術分享圖片


運行結果:

技術分享圖片

因為變量的內容被刪除,所以輸出的是空的。


變量類型:

運行shell時,會同時存在三種變量:

1) 局部變量 局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。

2) 環境變量 所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量。

3) shell變量 shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行





如果文中圖片失效,請點擊以下鏈接查看:

hell腳本介紹,shell腳本結構和執行,date命令的用法,shell腳本中的變量





本文出自 “zero” 博客,請務必保留此出處http://zero01.blog.51cto.com/12831981/1983828

shell腳本介紹,shell腳本結構和執行方式,date命令的用法,shell腳本中的變量簡介