shell腳本基礎 -----簡單腳本的實現
一、shell腳本的簡單介紹
s
hell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
-- shell是一種腳本語言;
-- 可以使用邏輯判斷、循環等語法;
-- 可自定義函數;
-- shell是系統命令的集合;
-- shell腳本可以實現自動化運維,能大大增加我們的運維效率
可以在當前系統查看當前默認shell
echo $SHELL
二、shell腳本的變量
1、局部變量
局部變量的作用域被限定在創建它們的shell中。local函數可以用來創建局部變量,但僅限於函數內使用。局部變量可以通過簡單的賦予它一個值或一個變量名來設置,用declare內置函數來設置,或者省略也可。局部變量僅對當前shell有效,子shell不繼承!可通過set命令查看所有的局部變量。
實驗證明設置的變量只在當前shell有效。
2、全局變量
全局變量通常又稱環境變量,以區別於局部變量,全局變量,顧名思義,不僅僅對當前的shell有效,也對子shell有效,export局部變量名稱可以設置為全局變量。
export 變量=值
[root@localhost^.^ ~]#export Name="guodong" (設置全局變量)
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#bash (進入子shell)
[root@localhost^.^ ~]#echo $$(查看當前shell號)
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#bash (進入‘孫子’shell)
[root@localhost^.^ ~]#echo $$(查看當前shell號)
10962
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#
bash命令可以進入子shell,當前shell號為10933,查看變量依舊繼承,繼續進入‘孫子’shell,shell號為10962,查看變量仍然繼承,故設置的為全局變量。
export設置的全局變量只在當前終端有效。
設置全局環境變量,對所有用戶都生效
etc/profile: 此文件為系統的每個用戶設置環境信息。當用戶登錄時,該文件被執行一次,並從 /etc/profile.d 目錄的配置文件中搜集shell 的設置。一般用於設置所有用戶使用的全局變量。
/etc/bashrc: 當 bash shell 被打開時,該文件被讀取。也就是說,每次新打開一個終端 shell,該文件就會被讀取。
修改/etc/profile文件後需要重新啟動才能生效,也可用source命令使其立即生效
3、位置變量
就是Bash將傳遞給腳本的參數保存在位置變量中,以便於在腳本中引用這些參數
直接舉例說明:
人生的第一個腳本
以後大家肯定會寫大量的腳本,所以可以創建一個簡單的腳本自動生成所需要的腳本文件,自動進入該文件編輯,並擁有標準格式。
#!/bin/bash (#!約定的標記,告訴系統使用哪一種shell)
echo "#!/bin/bash" >$1 (將雙引號裏面的內容添加到$1文件裏面,如果有,則覆蓋,沒有就創建)
echo "# ------------------------------------------" >>$1 (追加內容到該$1文件裏)
echo "#Filename: $1" >>$1
echo "# Revision: 1.0" >>$1
echo "# Date: $(date +"%F")" >>$1
echo "#Author: wang" >>$1
echo "#Email: [email protected]" >>$1
echo "#Website: www.magedu.com" >>$1
echo "#Description:" >>$1
echo "#------------------------------------------" >>$1
echo "#helloworld" >>$1
echo " " >>$1
chmod +x $1(自動給$1文件添加權限)
vim + $1 (自動進入該$1文件裏面編輯)
通過/root/bin/腳本文件名稱 新創建的文件名稱 執行腳本
當執行時自動進入vim編輯該文件模式
就這樣第一個腳本寫好了!這也是一個位置變量的例子。(#後面是註釋內容,執行腳本時系統不執行)
4、變量賦值
直接舉例
編寫腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
通過上面創建的腳本可以快速創建一個新的標準的腳本文件。
該文件的內容如下:
#!/bin/bash
GESHU=$(ls -d /etc/*|wc -l) (將查找的etc目錄下所有文件(不包括隱藏文件)列出並通過wc -l 顯示個數,將變量的值賦值給GESHU)
GESHU1=$(ls -d /etc/.*|wc -l) (將查找的etc目錄下所有隱藏文件列出並通過wc -l 顯示個數,將變量的值賦值給GESHU1)
GESHU2=$(ls -d /var/*|wc -l) (將查找的var目錄下所有文件(不包括隱藏文件)列出並通過wc -l 顯示個數,將變量的值賦值給GESHU2)
GESHU3=$(ls -d /var/.*|wc -l) (將查找的var目錄下隱藏文件列出並通過wc -l 顯示個數,將變量的值賦值給GESHU3)
GESHU4=$(ls -d /usr/*|wc -l) (將查找的usr目錄下所有文件(不包括隱藏文件)列出並通過wc -l 顯示個數,將變量的值賦值給GESHU4)
GESHU5=$(ls -d /usr/.*|wc -l) (將查找的usr目錄下所有隱藏文件列出並通過wc -l 顯示個數,將變量的值賦值給GESHU5)Sum=$[$GESHU+$GESHU1+$GESHU2+$GESHU3+$GESHU4+$GESHU5](將五個文件的值進行加減操作,將變量值賦值給Sum)
echo /etc/var/usr目錄中共有$Sum個!!!!
當然可以通過ls -a 命令直接列出所有文件,包括隱藏文件。
shell腳本基礎 -----簡單腳本的實現