shell腳本介紹,shell腳本結構和執行方式,date命令的用法,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命令的一些常見用法:
使用時間符號指定一個日期格式輸出當前的年月日:
關於表示時間符號的解釋:
%Y 4位的年份(Year)
%y 2位的年份
%M 表示當前的分鐘(Minute)
%m 表示當前的月份(Month)
%D 以2位的格式輸出當前的年月日
%d 表示當前的日期(Date)
%F 輸出當前的年月日,以 - 為分隔
%H 輸出當前的小時時間
%h 輸出當前的月份
%s 輸出時間戳
%S 輸出秒
%T 輸出當前時間,以 : 為分隔
%W 輸出本周是今年的第幾周
%w 輸出本周是這個月的第幾周
輸出以冒號為分隔的時間:
把時間戳轉換成當前日期:
打印一天後的日期:
date -d "+1 day" +%F
打印一天前的日期:
date -d "-1 day" +%F
打印一個月前的日期:
date -d "-1 month" +%F
打印一分鐘前:
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腳本中的變量簡介