Ваше меню, показанное выбором, будет похоже:
1) apache
2) named
3) sendmail
Select an option and press Enter:
В это время Вы входите "1" или "2" или "3": Вы не вводите слово.
Кроме того, select
циклично выполнится, пока это не будет видеть a break
команда, таким образом, Вы хотите это:
case $opt in
"apache")
date
break
;;
"named")
echo "test"
break
;;
"sendmail")
echo "test 2"
break
;;
*) echo "invalid option";;
esac
Если бы Вы хотели позволить пользователю вводить или номер или слово, то Вы могли записать это:
select opt in "${options[@]}"; do
case "$opt,$REPLY" in
apache,*|*,apache) do_something; break ;;
named,*|*,named) do_something; break ;;
sendmail,*|*,sendmail) do_something; break ;;
esac
done
Запятая не имеет никакого синтаксического значения, она должна просто там смочь скопировать соответствие на любом переменная $REPLY (который является тем, что пользователь на самом деле ввел), или переменная $opt
Это должно быть подходящей заменой:
grep -l foo * | sed -e 's/[^/0-9A-Z_a-z]/\\&/g' | xargs sed -i 's/foo/bar/g'
Попробуйте это:
perl -e 's/foo/bar/g;' -pi `egrep -l 'foo' $(find -type f)`
Это ищет регулярное выражение и возвращается на именах файлов, где это найдено. Затем Perl будет воздействовать только на те файлы.
\[*?
или пробел). Это - также проблема в вопросе.
– Gilles 'SO- stop being evil'
30.01.2011, 21:11
\'"
и пробел), должен быть защищен от расширенияxargs
. – Gilles 'SO- stop being evil' 30.01.2011, 21:10