linux脚本编写规则,shell脚本编写守则
現在centos7中使用的是bash軟件,通過以下命令可以查看bash版本:
[root@localhost ~]# cat /etc/redhat-release #查看系統的版本
CentOS Linux release 7.5.1804 (Core) #我這里使用的是centos 7.5 1804
[root@localhost ~]# bash --version #查看bash的版本
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) #這一行就是bash版本
Copyright (C) 2011 Free Software Foundation, Inc.
許可證 GPLv3+: GNU GPL 許可證版本3或者更高
這是自由軟件,您可以自由地更改和重新發布。
在法律允許的范圍內沒有擔保.
若生產環境下的服務器使用的是較老版本的系統及shell,那么建議將其升級到最新版的shell,因為近兩年老版本被暴露出存在較嚴重的安全漏洞。
bash軟件曾經爆出了嚴重漏洞(破殼漏洞),憑借此漏洞,別人可能會接管計算機的整個操作系統,得以訪問各種系統內的機密信息,并對系統進行更改等。任何人的計算機系統,如果使用了bash軟件,都需要立即打上補丁。檢測系統是否存在漏洞的方法為:
#測試系統是否存在漏洞
[root@localhost ~]# env x='() {:;}; echo be careful' bash -c "echo this is a test"
this is a test
返回上面的內容“this is a test”,則表示正常,若返回如下內容,則需要升級bash了,不過,僅僅是用于學習和測試就無所謂了。
[root@localhost ~]# env x='() {:;}; echo be careful' bash -c "echo this is a test"
be careful
this is a test
提示:如果沒有輸出be careful,則不需要升級。
升級方法如下:
[root@localhost ~]# rpm -qa bash #升級前的bash版本
bash-4.2.46-30.el7.x86_64
[root@localhost ~]# yum -y update bash #執行升級命令
[root@localhost ~]# rpm -qa bash #升級后的bash版本
bash-4.2.46-31.el7.x86_64
編寫shell腳本守則:
1、腳本開頭一行注明使用的是哪種解釋器,如:#!/bin/sh、#!/bin/bash......。
2、規范腳本的后綴名稱,如果是Shell腳本,就是“.sh”;如果是Python腳本,就是“.py”;如果是expect腳本,就是“.exp”。
3、寫好注釋,不挨罵,腳本中,除第一行使用#號后指定shell,以下所有的#號都表示注釋,可以和代碼共用一行,也可單獨寫一行,最好不要出現中文,若不寫注釋,會遭人罵的,可能自己過段時間也看不懂自己寫的腳本了。
shell腳本的執行:
當Shell腳本運行時,它會先查找系統環境變量ENV,該變量指定了環境文件(加載順序通常是/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc等),在加載了上述環境變量文件后,Shell就開始執行Shell腳本中的內容
Shell腳本是從上至下、從左至右依次執行每一行的命令及語句的,即執行完了一個命令后再執行下一個,如果在Shell腳本中遇到子腳本(即腳本嵌套)時,就會先執行子腳本的內容,完成后再返回父腳本繼續執行父腳本內后續的命令及語句。
Shell腳本的執行通常可以采用以下幾種方式:
bash script-name或sh script-name:這是當腳本文件本身沒有可執行權限(即文件權限屬性x位為-號)時常使用的方法,或者腳本文件開頭沒有指定解釋器時需要使用的方法。這也是推薦使用的方法;
path/script-name或./script-name:指在當前路徑下執行腳本(腳本需要有執行權限),需要將腳本文件的權限先改為可執行(即文件權限屬性加x位),具體方法為chmod+x script-name。然后通過腳本絕對路徑或相對路徑就可以直接執行腳本了。
source script-name或.script-name:這種方法通常是使用source或“.”(點號)讀入或加載指定的Shell腳本文件(如san.sh),然后,依次執行指定的Shell腳本文件san.sh中的所有語句。這些語句將在當前父Shell腳本father.sh進程中運行(其他幾種模式都會啟動新的進程執行子腳本)。因此,使用source或“.”可以將san.sh自身腳本中的變量值或函數等的返回值傳遞到當前父Shell腳本father.sh中使用。這是它和其他幾種方法最大的區別。
sh\
結論:
通過source或“.”加載執行過的腳本,由于是在當前shell中執行腳本,因此在腳本結束之后,腳本中的變量(包括函數)值在當前shell中依然存在;而sh和bash執行腳本時都會啟動新的子shell執行,執行完后退回到父shell。因此,變量和函數值等無法保留,在進行shell腳本開發時,如果腳本中有引用或執行其他腳本的內容或配置文件的需求時,最好用“.”或source先加載該腳本或配置文件,處理完成之后,再將他們加載到腳本的下面,就可以調用source加載的腳本及配置文件中的變量及函數等內容了。
編寫shell的守則:
shell腳本的第一行是指定腳本解釋器(不是必須的);
shell腳本的開頭會加版本、版權等信息,通常由腳本中的第二行開始寫(不是必須的);
在shell腳本中盡量不用中文(不僅僅是說注釋);
shell腳本的命名應以.sh為擴展名。
shell腳本應存放在固定的路徑下,一般是“/server/scripts”
以下則是shell腳本代碼書寫的良好習慣:
成對的符號應該盡量一次寫出來,然后退格在符號里增加內容,以防止遺漏。這些符號一般是“{ }”“[ ]”.......
中括號[ ]兩端至少要有一個空格,因此,鍵入括號時即可留出空格,然后在退格鍵進入中間的內容,并確保兩端都至少有一個空格,也就是說先鍵入一對中括號,然后退一格,輸入兩個空格,再退一格,雙中括號[ [ ] ]的寫法也一樣。
對于流程控制語句,應一次性將格式寫完,再添加內容,很多語言中都是這樣的,如:
一次性完成if語句的格式:
if 條件內容
then
內容
fi
一次性完成for循環語句的格式:
for
do
內容
done
while和until,case等語句也是一樣。
通過縮進讓代碼更易讀,比如上面的if、for語句。
對于常規變量的字符串定義變量值應加雙引號,并且等號前后不能有空格,需要強引用的(指所見即得的字符引用),則用單引號'',如果是命令的引用,則用反單引號``(該鍵位于esc鍵下面),例如:username="lv jian zhao"
腳本中的單引號、雙引號及反引號必須是英文狀態下的符號,其實所有的Linux字符及符號,都應該是英文狀態下的符號,這點需要特別注意。
說明:好的習慣可以讓我們避免很多不必要的麻煩,提升工作效率。
———————— 本文至此結束,感謝閱讀 ————————
總結
以上是生活随笔為你收集整理的linux脚本编写规则,shell脚本编写守则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京环球影城灯光秀时间
- 下一篇: 抽脂价格多少钱啊?