저는 스크립팅을 처음 접했고 그것이 무엇을 하는지 알아내려고 노력하고 있습니다. 도울 수 있니?
if [ "@$1@" = "@@" ]; then
strDate ='date +%Y%m%d'
else
strDate=$1
fi
답변1
전체적인 구조는if {조건} then {뭔가를 하세요} else {뭔가 다른 일을 하세요}. 셸 자체에는 fi
구문의 끝을 알리고 [ ... ]
조건부 테스트를 수행하는 등 구문을 구문 분석하는 데 도움이 되는 더 많은 구문이 필요합니다. )
조건부 테스트는
[ "@$1@" = "@@" ]
두 문자열이 동일한지 비교합니다([ X = Y ]
).- 첫 번째 문자열
@
뒤에는 프로그램이나 함수의 첫 번째 매개변수($1
)가 오고 그 다음에는 또 다른@
. 따라서 첫 번째 매개변수로 전달하면red
문자열은 가 됩니다@red@
. 반면에 아무것도 전달하지 않으면 문자열은 다음과 같습니다.@@
- 두 번째 문자열은 리터럴입니다.
@@
여기서 일어나는 일은 조건부 테스트가
$1
(프로그램이나 함수의) 첫 번째 인수가 null인지 확인하는 것입니다. 로 쓰는 것이 가장 좋습니다[ -z "$1" ]
.- 첫 번째 문자열
다음 줄에
strDate ='date +%Y%m%d'
구문 오류가 있어서 실행할 수 없습니다. 어쩌면 을 의미하는 것일 수도 있습니다 .strDate=`date +%Y%m%d`
이제 를 쓰는 것이 더 좋습니다strDate=$(date +%Y%m%d)
. (두 경우 모두 변수 이름과 해당 할당 사이에 공백이 있어서는 안 됩니다=
. 표시된 작은따옴표('...'
)는 할당이 문자열에서 12자라는 의미입니다date +%Y%m%d
. 그러나 목적은 다음과 같습니다 . 백틱을 명시적으로 사용하여 명령 실행의 출력을 할당하는 것입니다.) 이 줄은$strDate
변수를 오늘 날짜 형식으로 할당 합니다YYYYMMDD
(예: 2022년 8월 12일은20220812
).최종 할당은 프로그램이나 함수의 첫 번째 인수로 제공된 값을 변수에 할당합니다
strDate=$1
.$strDate
귀하가 제공한 코드의 값에 대한 추가 검증은 없습니다.
코드를 전달하면 많은 구문 및 구성 오류를 식별할 수 있다는 점을 지적하고 싶습니다 shellcheck
(또한https://shellcheck.net/).
다음은 더 나은 가독성을 위해 들여쓰기가 포함된 수정된 코드입니다.
if [ -z "$1" ]
then
strDate=$(date +'%Y%m%d')
else
strDate=$1
fi
쉘의 구문이 첫 번째 단락에서 제공한 설명을 명확하게 구현한다는 것을 알 수 있습니다. 어떤 사람들은 then
원래 코드에서 했던 것처럼 같은 줄에 넣기를 좋아합니다. 일관성을 유지하는 한 어느 쪽이든 문제가 되지 않습니다. 그러나 숙련된 거의 모든 코더는 코드 구조를 표시하기 위해 들여쓰기를 사용하며, 이는 범주 전반에 걸쳐 오류를 줄이는 데 도움이 되므로 자신의 코드에서 사용할 가치가 있는 방법입니다.if
if [ -z "$1" ]; then
마지막으로 단일 조건부 할당을 사용하여 전체 블록을 보다 관용적인 방식으로 대체할 수 있습니다.
strDate=${1:-$(date +'%Y%m%d')}