bash 스크립트에서 날짜 배열을 만들고 현재 날짜와 일치시킵니다.

bash 스크립트에서 날짜 배열을 만들고 현재 날짜와 일치시킵니다.

실제로 날짜 배열을 만들고 현재 날짜와 일치하면 오늘 날짜와 비교한 다음 test.sh파일을 실행하고 그렇지 않으면 bash 스크립트에서 루프를 종료하고 싶습니다. 나는 이것을 좋아한다 ...

#!/bin/bash

cd /home/user1

current_date=$(date +%Y-%m-%d)

array=['2016-03-02','2016-03-010','2016-05-10']

for i in "${array[@]}"
do
if [ $now -eq $i ]; then
        echo "executing your bash script file"
    ./myscript.sh
fi
done

위 스크립트를 실행하면 다음과 같은 오류가 발생합니다.

./sample.sh: line 6: [: 2016-03-02: integer expression expected

답변1

이 시도:

current_date=$(date +%Y-%m-%d)

array=('2016-03-02' '2016-03-010' '2016-05-10')

for i in "${array[@]}" ; do

    if [ "$current_date" == "$i" ]
        then echo "executing your bash script file"
        #./myscript.sh
    fi

done

실수:

  1. Bash 스크립트에서 배열을 선언할 때 대괄호를 사용하지 마세요. 이 대괄호는 명령을 생성합니다("if"-tests 참조).
  2. 공백으로 구분된 bash 스크립트의 배열 요소(쉼표 없음)
  3. 문자열을 비교하려면 해당 문자열을 포함하는 변수를 큰따옴표로 묶으십시오.
  4. 여기에서는 "-eq"를 연산자로 사용하지 마십시오(산술 연산자이므로). 대신에 "==" 또는 "!="를 사용하세요(여기도 참조하세요:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html)

답변2

bash이를 위해서는 풀이나 배열이 필요하지 않습니다 . 넌 할 수있어:

#! /bin/sh -
if grep -qx "$(date +%Y-%m-%d)" << EOF
2016-03-02
2016-03-01
2016-05-10
EOF
then
   test.sh
fi

또는:

#! /bin/sh -
dates="2016-03-02 2016-03-01 2016-05-10"
case " $dates " in
  *" $(date +%Y-%m-%d) "*)
     test.sh
esac

그렇지 않으면:

#! /bin/sh -
case $(date +%Y-%m-%d) in
  2016-03-02|2016-03-01|2016-05-10) test.sh
esac

zsh검색 가능한 배열의 경우 다음 을 사용하고 싶습니다 bash.

#! /bin/zsh -

dates=(2016-03-02 2016-03-01 2016-05-10)
if ((dates[(I)$(date +%Y-%m-%d)])) test.sh

관련 정보