出於安全性的考慮,不建議在bash腳本中註釋掉不使用的代碼。也就是說如果某段代碼不使用了,那麼應該刪除掉,而不是簡單地註釋掉。假如你突然意識到這一點,而以前並沒有遵從這個原則,現在需要找出腳本中的註釋性代碼,這可能是一個不小的工作量,讓我們寫一個腳本來幫助你吧,準確性無法達到百分之百,但是能夠提升效 ...
出於安全性的考慮,不建議在bash腳本中註釋掉不使用的代碼。也就是說如果某段代碼不使用了,那麼應該刪除掉,而不是簡單地註釋掉。假如你突然意識到這一點,而以前並沒有遵從這個原則,現在需要找出腳本中的註釋性代碼,這可能是一個不小的工作量,讓我們寫一個腳本來幫助你吧,準確性無法達到百分之百,但是能夠提升效率。
1.找出註釋性代碼的特點。
因為是bash腳本,註釋行必然包含#
grep "#"
2.判斷其是普通註釋還是代碼註釋
這是重點,也是難點,如何判斷一個註釋行是普通註釋還是對代碼的註釋呢?
# this is a common comment
下麵這行是對代碼的註釋
# if [ -e /etc/passwd ];then cat /etc/passwd;fi
3.要分析bash代碼的特點,在這些特點之前加上一個#,這個就是註釋代碼。
所以要把註釋代碼的模式寫入一個pattern文件,使用grep查找就可以了。
grep -E -f pattern.txt
pattern.txt內容如下:
#[\ ]if
#[\ ]for
#[\ ]*while
grep -e選項,用來指定多個模式,查找符合pattern1或pattern或pattern3的模式。
grep -e pattern1 -e pattern2 -e pattern3 -r -n filepath or dirpath
grep讀取文件中的模式。
grep -f pattern_file
-r 遞歸選項 --recursive
-n 顯示行號
-E 支持正則表達式
-l 顯示匹配的文件名
-L, --files-without-match
-q 安靜模式
-v 相反
-i 忽略大小寫
問題:linux命令執行的返回值時數字還是字元串?
grep的返回值在自動判斷的時候常常用到
特殊之處在於使用-v的時候
grep -v "pattern" filename 也就是有沒有pattern的行才是返回0,這個邏輯有點繞。
0意味著有條件所指定的值
if [ $? -eq 0 ]
then
do sth
fi
if [ $? -ne 0 ]
then
do sth
fi