나는 bash 스크립팅을 처음 접했고 내 스크립트의 특정 부분에 어떤 문제가 있는지 이해하지 못합니다. 내 스크립트에 있는 모든 종료를 선택하려고 합니다. 그리고 해당 조건이 모두 충족되지 않으면 유효하지 않고 그렇지 않으면 유효하다는 조건을 설정하려고 합니다.
if [[ `echo $?` -ne {0..4} ]]
then
echo "Its a Valid Date."
else
echo " Not valid date."
fi
실행하면 다음과 같은 결과를 얻습니다.
kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument `(' to conditional binary operator
./cal2: line 40: syntax error near `(0'
./cal2: line 40: `if [[ `echo $?` -ne (0..4) ]]'
답변1
`echo $?`
복잡한 글쓰기 방식입니다 $?
. 분명하고 간단한 방법이 있는데 복잡한 방식으로 일을 하지 마세요.
$?
0, 1, 2, 3 또는 4 값 중 하나인지 테스트하고 싶은 것 같습니다. 사용 중인 구문이 의미가 없습니다. 다섯 가지 동일 사례를 모두 테스트할 수 있습니다.
if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …
그러나 그것은 지나치게 장황하다. 0~4 범위를 허용하려고 하므로 $?
최소값보다 크고 최대값보다 작은지 테스트합니다.
if [[ $? -ge 0 && $? -le 4 ]]; then …
$?
결코 부정적이지 않으므로 테스트 $? -ge 0
가 불필요합니다. 따라서:
if [[ $? -le 4 ]]; then …
이는 산술 표현식을 사용하여 작성할 수도 있습니다. 연산자가 다르다는 점에 유의하십시오. 괄호 안의 조건부 구문은 -eq
, -ne
, -le
, -ge
및 -lt
를 사용하여 -gt
정수를 비교하는 반면 산술 표현식은 C와 유사한 구문을 갖습니다.
if (($? <= 4)); then …