다음 구조의 매개변수 목록을 받는 스크립트를 만들고 싶습니다.
- 첫 번째 매개변수: 파일 또는 디렉터리
- 기타 매개변수: 시스템의 명령 이름(예
date
:pwd
,tail
, ,head
,ls
)
스크립트는 첫 번째 인수로 받은 파일/디렉토리에서 모든 명령(두 번째 인수부터 시작)을 실행합니다.
이 스크립트를 시도했지만 명령 옵션을 사용할 수 없습니다. -l -i -n
어떻게 해야 합니까?
#!/bin/bash
name=$1
shift
for cmd in "$@"
do
if [ -e $name ]
then
echo Executing:$cmd
($cmd $name)2>/dev/null
if [ $? -ne 0 ]
then
echo error
fi
else
exit 7
fi
done
답변1
getopts
아니면 getopt
그게 답이에요.
getopts
예를 들어, 단축키를 사용할 수 -i
있으며 사용하기가 더 쉽습니다. 또한 bash에 내장되어 있으며 항상 사용할 수 있습니다.
getopt
와 같은 긴 매개변수를 사용할 수 있는 외부 도구이며 --input-file
사용하기가 약간 어렵습니다. 이것은 외부 도구이며 이론적으로는 존재할 수 없지만...
여기에서 간단한 튜토리얼을 읽어보세요: https://dustymabe.com/2013/05/17/easy-getopt-for-a-bash-script/