-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 -