2014-11-08 67 views
0

我正在一個代碼:UNIX殼腳本如果和grep命令目前

egrep '("$1"|"$2")' Cities.txt > test.txt 
if [ $# -eq 1] && grep -q "$1" test.txt ; then 
grep $1 Cities.txt 
elif [ $# -eq 2 ] && egrep -q '("$1"|"$2")' test.txt ; then 
egrep '("$1"|"$2")' Cities.txt > $2.txt 
else $1 not found on Cities.txt 
fi 
exit 

基本上,它讓用戶輸入1個或2個參數和參數(一個或多個)被使用/作爲grep的模式在Cities.txt中,並將輸出重定向到一個名爲test.txt的文件

如果用戶輸入了1個參數並且參數與test.txt的內容匹配,那麼它將顯示文件城市中包含參數1的行。文本。

如果用戶輸入的2論點和論據都相匹配的文件test.txt的內容,那麼它匹配在Cities.txt兩個參數,輸出重定向到用戶的第二個參數命名的文件。

我似乎無法得到代碼工作,可能是一些你們能不能幫我檢查錯誤。 感謝

回答

0
egrep "($1|$2)" Cities.txt > test.txt # change single quote to double quote 

if [ $# -eq 1 ] && grep -q -- "$1" test.txt ; then 
    grep -- "$1" Cities.txt 
elif [ $# -eq 2 ] && egrep -q -- "($1|$2)" test.txt ; then 
    egrep -- "($1|$2)" Cities.txt > $2.txt 
else 
    $1 not found on Cities.txt 
fi 

這極大地改變了語義,但我相信是你正在嘗試做的。我已經添加--試圖讓這個略顯強勁,但如果任一參數包含元字符爲正則表達式,這將失敗。但你可以嘗試:

if test $# -eq 1 && grep -F -q -e "$1" test.txt ; then 
    grep -F -e "$1" Cities.txt 
elif [ $# -eq 2 ] && grep -q -F -e "$1" -e "$2" test.txt; then 
    grep -F -e "$1" -e "$2" Cities.txt > $2.txt 
else 
    $1 not found on Cities.txt >&2 
fi 
+0

哇偉大的,一切工作正常,除了當我進入1種說法,這將使如果條件爲真,它沒有運行「然後」,而是跑了「其他」 – 2014-11-08 12:22:53

+0

僅僅輸入一個參數不符合'if'條件。該論據也必須在test.txt中。 – 2014-11-08 23:21:40

+0

啊哈,好吧,我明白了。在那裏,我可以做出滿足IF條件每當我進入1個爭論什麼變化? – 2014-11-09 01:18:03