선택적 입력 인수를 사용하는 bash 스크립트를 작성하는 방법
스크립트를 임의로 입력할 수 있도록 하고 싶다.
예: 현재 내 스크립트는
#!/bin/bash
somecommand foo
이렇게 말하고 싶습니다.
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
default-value 구문을 사용할 수 있습니다.
somecommand ${1:-foo}
위의 내용은 Bash 레퍼런스 매뉴얼 3.5.3 셸 파라미터 확장 [강조 마이닝]에서 설명한 바와 같이 다음과 같습니다.
매개 변수가 설정되지 않았거나 null인 경우 단어 확장이 대체됩니다.그렇지 않으면 매개 변수 값이 대체됩니다.
매개 변수가 설정되지 않은 경우(예: 빈 문자열이 아닌 null인 경우) 기본값만 대체하려는 경우 대신 다음 구문을 사용하십시오.
somecommand ${1-foo}
다시 Bash 참조 매뉴얼 - 3.5.3 셸 파라미터 확장:
콜론을 생략하면 설정되지 않은 파라미터에 대해서만 테스트가 이루어집니다.바꿔 말하면 콜론이 포함된 경우 연산자는 파라미터의 존재와 값이 null이 아님을 모두 테스트합니다.콜론을 생략하면 연산자는 존재 여부만 테스트합니다.
다음과 같이 변수의 기본값을 설정할 수 있습니다.
명령어를 입력합니다.쉿
#!/usr/bin/env bash
ARG1=${1:-foo}
ARG2=${2:-'bar is'}
ARG3=${3:-1}
ARG4=${4:-$(date)}
echo "$ARG1"
echo "$ARG2"
echo "$ARG3"
echo "$ARG4"
다음은 동작의 예를 제시하겠습니다.
$ ./somecommand.sh
foo
bar is
1
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh ez
ez
bar is
1
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh able was i
able
was
i
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh "able was i"
able was i
bar is
1
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh "able was i" super
able was i
super
1
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh "" "super duper"
foo
super duper
1
Thu 19 May 2022 06:58:52 ADT
$ ./somecommand.sh "" "super duper" hi you
foo
super duper
hi
you
if [ ! -z $1 ]
then
: # $1 was given
else
: # $1 was not given
fi
인수의 수를 확인할 수 있습니다.$#
#!/bin/bash
if [ $# -ge 1 ]
then
$1
else
foo
fi
변수 1달러라면 잊지 마세요.$n 치환을 사용하려면 정규 변수에 써야 합니다.
#!/bin/bash
NOW=$1
echo ${NOW:-$(date +"%Y-%m-%d")}
이것에 의해, 옵션의 첫 번째 arg 의 디폴트치가 허가되어 복수의 arg 가 유지됩니다.
> cat mosh.sh
set -- ${1:-xyz} ${@:2:$#} ; echo $*
> mosh.sh
xyz
> mosh.sh 1 2 3
1 2 3
옵션의 복수 인수의 경우는, 다음과 같이 유추합니다.ls명령어는 하나 이상의 파일을 가져올 수도 있고 기본적으로는 현재 디렉토리의 모든 파일을 나열할 수도 있습니다.
if [ $# -ge 1 ]
then
files="$@"
else
files=*
fi
for f in $files
do
echo "found $f"
done
경로에 공백이 있는 파일에는 제대로 작동하지 않습니다.아직 어떻게 해야 할지 모르겠어.
변수 치환을 사용하여 고정값이나 명령을 대체할 수 있습니다(예:date)를 참조해 주세요.지금까지의 답변은 고정값에 초점을 맞췄지만, 이것이 바로 날짜를 옵션 인수로 삼기 위해 사용한 것입니다.
~$ sh co.sh
2017-01-05
~$ sh co.sh 2017-01-04
2017-01-04
~$ cat co.sh
DAY=${1:-$(date +%F -d "yesterday")}
echo $DAY
${1:}을(를) 사용하면 함수에 전달된 첫 번째 매개 변수(1)를 잡을 수 있습니다.또는 (:) 기본값과 같은 공백을 잡을 수 있습니다.
예를들면.Laravel 장인을 사용할 수 있도록 .bash_aliases 파일에 저장합니다.
artisan() {
docker exec -it **container_name** php artisan ${1: } ${2: } ${3: } ${4: } ${5: } ${6: } ${7: }
}
이제 명령줄만 입력하면 됩니다.
- 장인 -- 모든 파라미터({1:} ${2:}) ${3:} ${4:} ${5:} ${6:} ${7:})는 공백일 뿐입니다.
- 장인 캐시: clear -- 첫 번째 파라미터(${1: })는 cache: clear가 되고 그 이외의 파라미터는 모두 공백이 됩니다.
이 경우 옵션으로 7개의 파라미터를 전달할 수 있습니다.
누군가에게 도움이 되었으면 좋겠어요.
언급URL : https://stackoverflow.com/questions/9332802/how-to-write-a-bash-script-that-takes-optional-input-arguments
'source' 카테고리의 다른 글
| ngFor와 함께 trackBy를 사용하는 방법 (0) | 2023.04.27 |
|---|---|
| vba 함수의 최대 문자열 크기를 사용하시겠습니까? (0) | 2023.04.22 |
| 클라우드 프로젝트를 빌드할 때 "객체 참조가 객체의 인스턴스로 설정되지 않음" (0) | 2023.04.22 |
| Enum을 ASP의 DropDownList 컨트롤에 바인드하려면 어떻게 해야 합니다.인터넷? (0) | 2023.04.22 |
| Windows 재귀 GREP 명령줄 (0) | 2023.04.22 |