실제로 날짜 배열을 만들고 현재 날짜와 일치하면 오늘 날짜와 비교한 다음 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
실수:
- Bash 스크립트에서 배열을 선언할 때 대괄호를 사용하지 마세요. 이 대괄호는 명령을 생성합니다("if"-tests 참조).
- 공백으로 구분된 bash 스크립트의 배열 요소(쉼표 없음)
- 문자열을 비교하려면 해당 문자열을 포함하는 변수를 큰따옴표로 묶으십시오.
- 여기에서는 "-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