歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux中的shell腳本管理(一)

linux中的shell腳本管理(一)

日期:2017/3/3 15:56:51   编辑:關於Linux

一:Shell的作用及常見種類:

Shell是一個特殊的應用程序,他介於操作系統內核與用戶之間,負責接受用戶輸入的操作指令(命令)並進行解釋,將需要執行的操作傳遞給內核執行。因此,Shell程序在系統中充當了一個“命令解釋器”的角色,eg:微軟的cmd.exe也屬於Shell程序;

在Unix/Linux操作系統中,能夠使用的Shell程序有很多種,功能也比微軟的“cmd.exe”要強大的多,下面就是常見到的Shell程序環境,(功能可以自己去了解下:)

Bsh:

Csh:

Ksh:

Bash:

Zsh:

1、Shell環境的切換:

為了提高系統的兼容性,在RHEL5系統中提供了對各種常見Shell程序的支持,通過配置文件“/etc/shells”可以了解系統所支持的shell程序的路徑;

查看當前Linux系統中能夠使用的Shell程序的列表:

其中有一部分Shell程序實際上是其他Shell程序的符號鏈接文件,這樣做是為了更好地提供Shell程序之間的兼容性,eg:tcsh是csh的兼容升級版本,因此在系統運行csh時將直接運行tcsh。

確認Shell程序中存在的部分鏈接文件:

用戶在執行Linux命令操作的過程中,若希望使用其他的Shell程序環境,可以進行相應的切換。

ksh即可切換到ksh程序環境 //////echo $0

exit即可退回

1.2:更改用戶自己的登錄Shell

用戶每次登錄到Linux系統時系統自動加載的Shell程序即為該用戶的登錄Shell,用戶的登錄Shell信息記錄在“/etc/passwd”文件中,並允許用戶通過chsh命令進行修改。

使用chsh命令設置了新的登錄Shell後,新的登錄Shell將在該用戶下一次登錄系統時生效

1.3:由管理員(root)更改其他用戶的登錄Shell

usermod -s /bin/bash teacher 即可!

2、Bash的常用功能:(Tab 鍵的自動補齊。。。。。。)

2.1:命令歷史:history

2.2:命令別名:alias

查看已設置的的所有命令別名:

eg:設置一個命令別名dir,以便執行“ls -ld --color=tty”的命令,並進行確認。

取消上一步設置的dir命令別名:

unalias dir 即可 ///////////alias -a 取消了所有的命令別名

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

2.3:標准輸入輸出和重定向、管道操作等等!

3、Shell變量應用:

在各種Shell程序環境中,都使用到了“Shell變量”的概念,Shell變量用於保存系統和用戶需要使用的特定參數(值),而且這些參數可以根據用戶的設定或系統環境的變化而相應變化,通過使用變量,Shell程序能夠提供更加靈活的功能,適應性更強。

常見的Shell變量的類型包括用戶自定義變量,環境變量,預定義編譯,位置變量。

3.1:用戶自定義變量

用戶自定義變量是由系統用戶自己定義的變量,只在用戶自己的Shell環境中有效,因此又稱為本地變量。在編寫Shell腳本程序時,通常會需要設置一些特定的自定義變量,以適應程序執行過程中的各種變化,滿足不同的需要。

>:定義新的變量,Bash中的變量操作相對比較簡單,沒有其他高級編程語言(如:C/C++、java等)那麼復雜,在定義一個新的變量時,一般不需要提前聲明,而是直接指定變量名及初始化值(內容)即可,定義變量操作的基本格式如下(等號兩邊都沒有空格)。

變量名=變量值

1 eg:DAY=Sunday

>:查看及引用變量的值

1 echo $DAY 即可

注:在變量DAY的內容後緊跟“Morning“字符串並一起顯示。

1 echo ${DAY}Morning

//錯誤引用為 echo $DAYMorning (當變量名稱容易和緊跟其後的其他字符相混淆時,需要添加大括號“{}”將其包圍起來,否則將無法確定正確的變量名稱)

3.2:為變量賦值的常用方法

在等號“=”後邊直接指定變量內容是為變量賦值的最基本方法,除此以外,管理員通常還會使用到其他的一些賦值操作,從而使變量內容獲取更加靈活多變,以便適用於各種復雜的系統管理任務。常用的幾種變量賦值操作包括雙引號、單引號、反撇號、read命令。

>:雙引號(“)

使用雙引號時,允許在雙引號的范圍使用”$“符號來引用其他變量的值(變量引用)。在簡單的賦值操作中,雙引號有時候可以省略。

>:單引號(’)

使用單引號時,將不允許在單引號的范圍內引用其他變量的值,”$“符號或者其他任務將作為普通字符看待;

>:反撇號(`)

使用反撇號時,允許將執行特定命令的輸出結果賦給變量(命令替換),反撇號內包含的字串必須是能夠執行的命令,執行後會用輸出結果替換該命令字串。

>:read 命令

除了上述賦值操作以外,還可以使用Bash的內置命令read來給變量賦值。read命令可以從終端(鍵盤)讀取輸入,實現簡單的交換過程。read將從標准輸入讀入一行內容,並以空格為分隔符,將讀入的各字段分別賦值給指定列表中的變量(多余的內容賦值給最後一個變量)。若指定的變量只有一個,則將賦值內容賦值給該變量。

為了使交互式操作的界面更加友好,提高易用性,read命令可以結合“-p”選項來設置提示信息,用於告知用戶應該輸入的內容等相關事項。

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

3.3:設置變量的作用范圍i對於用戶自行定義的變量,默認情況下只能在當前的Shell環境中使用,因此稱為局部變量。局部變量在新開啟的子Shell環境中是無效的(無法引用定義的變量)

eg:在Bash環境定義的變量是不能在csh使用的。

為了使用戶定義的變量在所有的子Shell環境中能夠繼續使用,減少重復設置工作,可以使用export命令將指定的變量設置為“全局變量”。export命令可以同時使用多個變量名作為參數(不需要使用“$”符號),變量名之前以空格分隔。

export haha 即可!

>:export命令還可以在輸出變量的同時對指定名稱的變量進程賦值(創建),這樣在使用export命令之前就不需要單獨為變量進行賦值了

eg:定義兩個變量MONTH、YEAR,並將其設置為全局變量。

3.4:清除自定義變量:當用戶不再需要使用定義變量時,可以使用unset命令對已定義的用戶變量進行清除,指定一個或多個變量名稱作為參數即可(以空格分隔)

unset DAY MONTH YEAR //即可!

3.5:數值變量的運算

Bash程序並不適合進行強大的數學運算(如小數、指數等),一般只適合進行簡單的整數運算。可以使用expr 表達式命令,格式如下:

expr 變量1 運算符 變量2 + - \* /

4、環境變量

這裡說的環境變了是指用戶登錄後Linux系統預先設定好的一類Shell變量,其功能是設置用戶的工作環境,包括用戶宿主目錄,命令查看路徑,用戶當前目錄,登錄終端等,在實際使用過程中,環境變量並沒有嚴格的區分定義,用戶自己設置的變量也可以作為環境變量。

環境變量的名稱比較固定,通常使用大寫字母,數字和其他字符組成,而不使用小寫字母。環境變量的值一般由Linux系統自行維護、會隨著用戶狀態的改變而改變,用戶可以通過讀取環境變量來了解自己當前的環境。

4.1>:查看環境變量;set 即可!

根據當前環境變量用戶可以知道好多內容

確認當前的命令搜索路徑,並將“/opt/bin”目錄添加帶現有的搜索路徑中去。

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

4.2>:環境變量配置文件

在Linux系統中,用戶環境變量的設置工作習慣上在"/etc/profile"文件及用戶宿主目錄中的“.bash_profile”文件中進行,前者稱為全局配置文件(對所有用戶起作用),後者成為用戶配置文件(允許覆蓋 全局配置)。

5:位置變量

所謂位置變量也就是一些$n變量

$12345689

6:預定義變量

預定義變量是由Bash程序預先定義好的一些特殊變量。用戶只能使用預定義變量,而不能創建新的預定義變量,或直接修改預定義變量賦值。所有的預定義變量都是由“$”符號和另一個符號組成的,較常用的Shell預定義變量包括以下這些。

$#:表示命令行中位置參數的數量。
$*:表示所有位置參數的內容。
$?:表示命令執行後返回的狀態,用戶檢查上一個命令的執行是否正確。在Linux中,命令推出狀態為0表示命令執行正確,任何非0值的表示命令執行錯誤。
$$:表示當前進程的進程號。
$!:表示後台運行的最後一個進程的進程號。
$0:表示當前執行的進程的進程名。

預定義變量通常使用在Shell腳本程序中,在命令行界面中的應用並不多見(盡管也可以使用)。

7:腳本的概念:

Bash程序不僅可以作為用戶管理Linux系統的命令操作環境,同時也可以作為一種優秀的腳本程序語言。凡是使用Shell編程的語言編寫的程序都可以稱為Shell腳本,通俗一點說,只要將一些Linux命令按順序保存到一個文本文件中,並給予這個文件可執行權限,那麼這個文件就可以稱為Shell腳本。當然,Shell腳本是為了完成一定的管理任務才創建的,因此腳本文件中的各條命令並不是雜亂無章隨便放置的,這就需要用戶來進行組織和設計了。

7.1:編寫Shell腳本文件 (建立包含可執行語句的文件文件)

使用文本編輯器程序(如:vi)創建腳本文件,文件名中可以使用擴展名(如:“.sh”),也可以不使用擴展名,並沒有強制的要求。腳本中可能包括的內容如下:

>:運行環境設置:通常位於文件的第一行,用戶指定使用那一個Shell程序進行解釋。設置時以“#!”開始,後面緊跟上指定的Shell程序的完成路徑,如“#!/bin/bash”。

>:注釋行:在腳本文件中,除了以“#!”開頭的Shell環境設置行以外,其他以“#”符號開頭的內容將被視為注釋信息,執行腳本時將予以忽略。編寫腳本程序時,添加必要的注釋語句是一個良好的習慣,這樣將大大增強腳本文件的易讀性,方便在不同時間,不同用戶間交流使用。

>:可執行語句:可執行語句是Shell腳本程序中最重要的組成部分,在命令行操作界面中可以執行的命令都可以寫入到腳本當中,程序運行時默認情況下將會按照順序依次解釋執行。除此以外,還可以添加一些程序結構語句,用戶靈活控制執行過程,提高程序執行效率。

eg:使用vi編輯器編寫一個簡單的Shell腳本文件test.sh,用於報告當前系統中“/boot”目錄所占用的空間大小,並列出其中的內核文件的屬性信息。

為腳本文件添加可執行權限

chmod a+x test.sh

執行該腳本:bash test.sh

7.2:說到執行Shell腳本有多種方式:

>:直接執行帶"x"權限的腳本文件

為腳本文件設置了可執行屬性後,在Shell命令行中可以直接通過腳本文件的路徑執行腳本程序,這也是最常用的一種方式,

執行時需要在文件名之前加入“./”路徑,明確執行需要執行當前目錄下的腳本文件,這種方法也是出於對系統安全性的考慮。

>:使用Shell解釋器程序執行腳本

這種方式可以將腳本文件作為指定Shell解釋器程序(如:bash、sh等)的參數,由解釋器程序負責讀取腳本文件中的內容並執行,因此並不需要腳本文件具有可執行屬性。此方法通常只在腳本的調試階段使用。

>:使用“.”命令執行腳本

使用Shell解釋器程序(如:bash)執行指定腳本文件時,是在當前Shell中啟動一個子Shell來運行腳本程序,因此腳本程序中定義的環境變量只能在子Shell環境中使用,而無法在用戶當前的Shell環境中使用。

使用Bash的內部命令“.”(或使用source命令,其作用相同)加載指定的腳本文件並執行時,系統將不會開啟新的Shell環境。使用這種方式時,腳本文件作為“.”命令的參數,因此同樣不要求腳本文件具備“x”權限。例如,在修改完“/etc/profile”文件以後,可以執行“. /etc/profile”命令,使得在文件中新設置的變量立即生效,而無需重新登錄。

test.sh腳本在/home/下

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

實例1:由於公司的文件服務器空間有限,需要完成一向定期任務,即在每周五下班前(17:30)檢查公共共享目錄"/var/ftp/pub"中的內容,並將其中所有子目錄及文件的詳細列表和當時的時間信息追加保存到“/var/log/pubdir.log”日志文件中,然後清空目錄中的內容。

vim /opt/ftpclean.sh

chmod a+x /opt/ftpclean.sh
crontab -e
30 17 * * 5 /opt/ftpclean.sh

OK! 記得crond服務

實例2:公司內網開發服務器中的數據庫目錄位於“/usr/local/mysql/lib/mysql”,根據數據安全管理要求,至少每隔三天要做一次完成備份,備份前需要統計該目錄占用的總空間大小,並將備份日期、目錄空間大小等信息保存到臨時文件“/tmp/dbinfo.txt”中,然後使用tar命令將dbinfo.txt文件隨數據庫目錄一起備份到"/opt/dbbak/"目錄中,備份包文件名要要求體現當天的日期。

mkdir /opt/dbbak

vim /opt/dbbak.sh

chmod a+x /opt/dbbak.sh
crontab -e
55 23 */3 * * /opt/dbbak.sh

記得crond服務

本文出自 “Coffee_藍山” 博客,請務必保留此出處http://lansgg.blog.51cto.com/5675165/1244793

Copyright © Linux教程網 All Rights Reserved