명령줄처럼 스크립트를 실행해야 하는 매우 긴 bash 스크립트가 있습니다. 내가 실행하면
./script.sh arg1 arg2 create
위에서 언급한 것처럼 "arg1" 및 "arg2"와 함께 "create" 문자열을 전달하면 script.sh의 특정 기능이 실행되어야 합니다(예: create_fn()).
위와 같이
./script.sh arg1 add
문자열 "add"를 전달하고 arg1만 전달하면 --> create_add() 함수가 실행되어야 합니다.
또한 "cr" 다음에 Tab을 누르면 자동으로 "create"/ad->add라고 쓰여야 합니다.
누구든지 나를 도와줄 수 있나요?
답변1
우선, 본 홈페이지에 오신 것을 환영합니다.
귀하의 질문에 대한 대답은 스크립트에 전달된 매개변수의 일관성에 따라 달라집니다.
만약에보장
- "create" 매개변수는 총 3개의 매개변수가 있는 경우에만 사용됩니다. 여기서 "arg1"과 "arg2"는 "create" 앞에 옵니다.
- "add" 매개변수는 총 2개의 매개변수가 있는 경우에만 사용됩니다. 여기서 "arg1"은 "add" 앞에 옵니다.
그런 다음 스크립트를 호출한 총 인수 수를 포함하는 if
내장 변수에 대해 스크립트 내에서 작업 할 수 있습니다 .$#
#!/bin/bash
if [[ "$#" == "3" && "$3" == "create" ]]
then
create_fn <possible arguments here>
elif [[ "$#" == "2" && "$2" == "add" ]]
then
create_add <possible arguments here>
fi
설명하자면, if
테스트에서 매개변수의 개수( ) $#
가 3인지 확인합니다.그리고세 번째 인수( $3
)는 "만들기"를 한 다음 호출합니다 create_fn
(인수를 사용하여 질문에 필요한지 여부를 지정하지 않았을 수도 있음).또는숫자 또는 인수가 2이고 두 번째 인수가 "add"인 경우 이 경우 를 호출합니다 create_add
.
반면, 명령줄 인수의 순서가 임의적이라면 더 똑똑한 인수 처리 루틴을 구현해야 합니다.선택 항목 가져오기당신의 친구가 될 것입니다.
쉘 프로그래밍에 대한 자세한 내용은 다음을 확인하세요.고급 Bash 스크립팅 가이드.
~에 대한두 번째 부분귀하의 질문: 귀하가 찾고 있는 기능은 "bash 완성"이라고 합니다. 이는 특히 자동 완성을 원하기 때문에 사소한 일이 아닙니다.명령줄 매개변수가능한 값은 현재 입력된 매개변수 목록의 위치와 명령줄의 이전 항목에 따라 달라집니다. 이는 가능하지만 사소한 것은 아닙니다(예:Bash 명령 완성을 사용자 정의하는 방법은 무엇입니까?).
답변2
설정을 조금 바꿔서 통과해야 할 것 같습니다 getops
. 하지만 이것들은 반드시 시작 부분에 있어야 하고 한 글자만 가능합니다. 한 가지 예:
#!/bin/bash
add=no
create=no
while getopts "ca" option ; do
case $option in
a) add=yes ;;
c) create=yes ;;
\?) echo 'Invalid option. Aborted.' ; exit ;;
esac
done
#shift argument numbers so that file1 is $1 etc.
shift $((OPTIND-1))
if [[ "$add" == "yes" ]] ; then
do_add_procedure
elif [[ "$create" == "yes" ]] ; then
do_create_procedure
else
do_neither
fi
if
- 문을 실행하는 방법(예: 두 개의 문으로 분할) 에 따라 이제 두 옵션을 모두 제공하여 "create" 및 "add"를 실행할 수도 있습니다. 그러나 bash
-script 매개변수는~ 해야 하다명령 시작 부분에서 다음을 수행합니다.
./script.sh -a file1 file2