国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > shell > 正文

Shell編程的10個(gè)最佳實(shí)踐

2024-09-07 17:31:43
字體:
供稿:網(wǎng)友
       每一個(gè)在UNIX/Linux上工作的程序員可能都擅長shell腳本編程。 但大家解決問題的方式卻不盡相同,這要取決于對(duì)專業(yè)知識(shí)的掌握程度、使用命令的種類、看待問題的方式等等。對(duì)于那些處在shell腳本編程初級(jí)階段的程序員來說,遵循一些恰當(dāng)?shù)淖龇梢詭椭愀臁⒏玫膶W(xué)習(xí)這些編程技巧。下面,我們就來討論這些能幫助你學(xué)習(xí)shell腳本編程的方法吧。


1、多動(dòng)手
       一些人會(huì)先通讀整本教材后再上機(jī)練習(xí)。這種方法可能適用于一些人,但我卻不太看好它。我的建議是,先學(xué)一些最基礎(chǔ)的,能夠讓你開始編碼的知識(shí)就可以了。之后,動(dòng)手寫一些簡單的程序。一旦你由于知識(shí)上的欠缺而不得不停止時(shí),再回到書本上去讀你想要了解的那部分,然后繼續(xù)做你的項(xiàng)目。如此周而復(fù)始,不斷提高你的水平。這種邊學(xué)邊做的方法曾讓我受益良多。


2、善用命令提示符

       有時(shí)候,我們寫的腳本中有一些錯(cuò)誤。我們修改錯(cuò)誤,運(yùn)行腳本,但系統(tǒng)再次報(bào)錯(cuò)。并且這個(gè)改錯(cuò)報(bào)錯(cuò)的過程可能會(huì)發(fā)生很多次。碰到這些情況,首先需要找到有問題的行或命令,這可以通過一些調(diào)試語句來輕松做到。一旦發(fā)現(xiàn)這條語句,嘗試在命令提示符下執(zhí)行相同的語句。如果它在命令提示符下開始正常運(yùn)行,你就可以容易的推斷出它不能正常運(yùn)行的原因了。可能是由于某些錯(cuò)誤輸入的命令,或者是某些環(huán)境變量不匹配,或者是從不同的地方引用了某個(gè)二進(jìn)制文件等等。這種方法會(huì)讓調(diào)試變得簡單易行。

3、考慮問題要全面

       現(xiàn)在我們來看個(gè)問題。你想到了關(guān)于某個(gè)問題的解決方案,但這個(gè)解決方案只適用于處理小型文件。可是當(dāng)處理比較大的文件時(shí),你該怎么辦?舉個(gè)例子,我們想要得到一個(gè)文件的第一行內(nèi)容:

sed -n '1p' file

       這條語句當(dāng)然會(huì)給出你想要的第一行內(nèi)容。可是如果處理的文件包含上百萬條記錄呢?盡管上面的那條sed命令可以輸出文件的第一行內(nèi)容,但是想要處理大型文件一定會(huì)帶來性能上的問題。

解決辦法:

sed -n '1p;1q' file

這條命令將只輸出第一行,同時(shí)退出程序。


4、經(jīng)常嘗試不同的方法
       你在寫腳本時(shí)碰到一個(gè)問題,然后你找到了一種獨(dú)特的解決方法。下一次你偶然又碰到類似的問題,這時(shí),不要再用以前你用過的方法來解決。試試另外一種方法吧。如果某一天再次遇到這種情況,再試試其它方法。
例如:


if [ $? -eq 0 ]
then
echo "Success"
fi
另一種方法:


[ $? -eq 0 ] && echo "Success"
       現(xiàn)在你可能會(huì)明白這個(gè)博客里會(huì)有那么多以“……的不同解決方法”為題的文章了吧。所有這些文章的目的都是用來幫助訂閱這個(gè)博客的開發(fā)者開闊視野,打開思路。


5、快速編碼
       腳本可以節(jié)省我們的時(shí)間,提高生產(chǎn)力。可是,難道我們花在寫腳本和測(cè)試上的時(shí)間還少嗎?我們想寫一個(gè)腳本,于是打開一個(gè)文件,寫下代碼,保存文件, 之后運(yùn)行腳本,系統(tǒng)報(bào)錯(cuò),我們?cè)俅蜷_文件修改、保存、運(yùn)行……在這個(gè)過程中會(huì)花費(fèi)很多時(shí)間。在此前的一篇題為《SHELL編程指導(dǎo)》的文章里,你可以學(xué)會(huì)如何編寫腳本和測(cè)試正在運(yùn)行中的腳本,而不用再回顧命令提示符。這些方法可以加快編碼的速度。當(dāng)我寫腳本的時(shí)候,我總是使用這些方法。而且我可以很肯定的說,它們幫我節(jié)約了不少時(shí)間。


6、經(jīng)常使用內(nèi)部命令
       無論碰到哪種情況,請(qǐng)盡量考慮使用內(nèi)部命令而不是外部命令。用內(nèi)部命令對(duì)你永遠(yuǎn)都有好處。根據(jù)正在處理的輸入文件的大小,內(nèi)部命令可以在性能方面為你節(jié)省很多。雖然你并不總是有這樣選擇內(nèi)部命令抑或外部命令的機(jī)會(huì),但在某些情況下,你一定能做出正確的選擇。


7、沒有必要使用cat命令
       這是我們經(jīng)常在論壇里討論的話題之一。沒有必要使用cat命令指的是在有些時(shí)候,我們會(huì)發(fā)現(xiàn)根本沒有必要使用cat命令。有時(shí)候,使用了多余的cat命令會(huì)讓你的代碼看起來很丑陋,而且還會(huì)帶來性能上的問題。
例如:


$ cat /etc/passwd | grep guru
正確的方法應(yīng)該是:


$ grep guru /etc/passwd
8、仔細(xì)閱讀錯(cuò)誤信息
       程序員常犯的一個(gè)錯(cuò)誤是:當(dāng)我們敲入的命令報(bào)錯(cuò)后,我們中的大多數(shù)人只是對(duì)錯(cuò)誤信息一瞥而過,而不會(huì)去認(rèn)真的讀一讀。很多時(shí)候,錯(cuò)誤信息里就包含了解決辦法。更重要的是,有時(shí)候我們修改了某個(gè)錯(cuò)誤并再次運(yùn)行后,系統(tǒng)依舊會(huì)報(bào)錯(cuò)。然后我們?cè)俅涡薷模到y(tǒng)再次報(bào)錯(cuò)。這可能會(huì)持續(xù)很長時(shí)間。但實(shí)際上,舊的錯(cuò)誤可能已經(jīng)被糾正,只是由于出現(xiàn)了其它一些新錯(cuò)誤才導(dǎo)致系統(tǒng)再次報(bào)錯(cuò)。而我們依舊在懷疑為什么修改好的代碼依然不能正常運(yùn)行。因此,請(qǐng)你養(yǎng)成仔細(xì)閱讀錯(cuò)誤信息的習(xí)慣。


9、盡量避免臃腫的命令
       你正在嘗試去從一個(gè)大的文件中篩選某條信息。接下來你可能寫一大堆命令來實(shí)現(xiàn)這一功能。可是,盡管你將得到正確的結(jié)果,你寫的命令卻不夠好,且晦澀難懂。因此,我們應(yīng)該盡量避免這種情況發(fā)生。下面這個(gè)例子就是代碼優(yōu)化的好例子。
例如:檢索用戶ID值為502的用戶名。
下面的命令不好:


$ grep 502 /etc/passwd | cut -d: -f1
這條命令也不夠好:


$ grep 502 /etc/passwd | awk -F ":" '{print $1}'
這才是一條好的命令:


$ awk -F ":" '$3==502{print $1}' /etc/passwd
正如以上示例,用一條簡單的awk命令就可以完成檢索任務(wù)。


10、別吝嗇添加注釋
       寫了一份腳本,一兩個(gè)星期后,你再次打開腳本文件,如果沒有注釋在里面的話,你可能會(huì)花上很多時(shí)間才能理解這些代碼。雖然代碼是我們自己寫的,但這依舊會(huì)浪費(fèi)我們很多的時(shí)間。腳本是用來節(jié)省時(shí)間的,因此,我們沒有理由浪費(fèi)時(shí)間去理解這些用來節(jié)省時(shí)間的文件。所以,請(qǐng)養(yǎng)成在腳本中添加注釋的好習(xí)慣。 這些注釋不必很詳細(xì),能讓自己或別人讀懂就行。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 仪征市| 珲春市| 灌阳县| 海口市| 泸州市| 高密市| 顺昌县| 邮箱| 招远市| 新营市| 北票市| 昌宁县| 巩留县| 大同市| 新巴尔虎右旗| 新安县| 竹溪县| 彩票| 龙南县| 陆丰市| 进贤县| 依安县| 贞丰县| 沛县| 德昌县| 南平市| 察隅县| 萍乡市| 太谷县| 博罗县| 芒康县| 文化| 城市| 峨眉山市| 广元市| 新营市| 奇台县| 郸城县| 汉沽区| 德安县| 浦城县|