2014-11-08 3 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 pattern в Cities.txt и перенаправить вывод в файл с именем test.txt

Если пользователь ввел один аргумент и аргумент соответствовал содержимому 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 аргумент, который сделает, если условие истинно, оно не запустить «тогда», вместо этого он побежал «еще» –

+0

Просто ввод одного аргумента не удовлетворяет условию 'if'. Этот аргумент также должен быть в test.txt. –

+0

aah, ладно, я понимаю. есть ли какие-либо изменения, которые я мог бы сделать, чтобы удовлетворять условию IF при вводе 1 аргумента? –

Смежные вопросы