
Я расширяю следующую функцию, включив в нее опцию -i | --ignore-case
обработки ошибок
#!/bin/sh
[ $# -ne 1 ] && echo "1 argument is needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -il "$1" {} + | vim -
Расширенный код
#!/bin/sh
################################
# Check if parameters options #
# are given on the commandline #
################################
while (( "$#" )); do
case "$1" in
-h | --help)
echo "help menu"
exit 0
;;
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -il "$1" {} + | vim -
exit 0
;;
-*)
echo "Error: Unknown option: $1" >&2
exit 1
;;
*) # No more options
break
;;
esac
shift # not sure if needed
done
# Do this if no cases chosen
[ $# -ne 1 ] && echo "1 argument is needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -l "$1" {} + | vim -
Результат
haetex "TODO"
. Ожидаемый вывод совпадает с выводом. Пройдено!haetex -i "TODO"
. Ожидаемый результат: поиск с игнорированием регистра. Результат: пустой файл.
Почему эта опция -i
здесь не работает?
решение1
Измените grep
в регистре -i
на поиск $2
, поскольку $1
содержит опцию, которую вы только что проверили, а не строку поиска.
find $HOME -type f -name "*.tex" -exec grep -il "$2" {} + | vim -
Для обработки нескольких параметров было бы лучше case
просто задать переменную в операторе, например:
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
case_option=-i
;;
Тогда find
команда после цикла будет выглядеть так:
find $HOME -type f -name "*.tex" -exec grep -l $case_option "$1" {} + | vim -
В этом случае его можно использовать, $1
поскольку он shift
переместил строку поиска в начало аргументов.
Итак, весь сценарий выглядит так:
while (( "$#" )); do
case "$1" in
-h | --help)
echo "help menu"
exit 0
;;
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
case_option=-i
;;
-*)
echo "Error: Unknown option: $1" >&2
exit 1
;;
*) # No more options
break
;;
esac
shift # not sure if needed
done
find $HOME -type f -name "*.tex" -exec grep -l $case_option "$1" {} + | vim -