2013-08-08 21 views
11

Tôi cần chạy lệnh khi có gì đó được nhập vào BASH với một khung thời gian nhất định và nếu không phải lúc đó chạy lệnh khác. Đây là những gì tôi đã có cho đến nay, nhưng nó không có vẻ hoạt ..

FLATTIME=$(date "+%H%M") 
FLATTIME=${FLATTIME##0} 

if ! [[ $FLATTIME -gt 1130 ]] ; then 
mysql --host=192.168.0.100 --user=myself --password=mypass thedb << EOF 
INSERT INTO $STAFFID values ('','$STAFFID','$THETIME','','$THEDATE','$DAYOFWEEK'); 
EOF 

else 
mysql --host=192.168.1.92 --user=myself --password=mypass thedb << EOF 
UPDATE $STAFFID SET Out_Time='$THETIME' WHERE date='$THEDATE'; 
EOF 
fi 

Lý tưởng nhất là những gì tôi muốn là phải có cái gì đó như: nếu thời gian là 08:00-01:00 làm đầu tiên lệnh, nếu thời gian là từ 1 giờ chiều đến 11 giờ tối, hãy thực hiện lệnh thứ hai, nếu không thì "echo của ai đó đang làm việc quá lâu". Tôi đã thử một vài biến thể nhưng không may mắn, nó dường như chạy lệnh đầu tiên bất cứ điều gì tôi làm ..

+1

Đây có thể là quá rõ ràng, nhưng bạn đã chạy kịch bản này tại một thời điểm muộn hơn năm 1130? Hoặc nhận xét ra lệnh 'date' và mã hóa dấu thời gian để thử nghiệm? Tôi đã thử cấu trúc 'if-else' trên máy tính của tôi và nó hoạt động tốt. –

Trả lời

24

Trong trường hợp này, bạn chỉ cần nhìn vào giờ. Ngoài ra, bash có cú pháp để xác định radix của một số, do đó bạn không phải lo lắng về 08 và 09 là số bát phân không hợp lệ:

H=$(date +%H) 
if ((8 <= 10#$H && 10#$H < 13)); then 
    echo between 8AM and 1PM 
elif ((13 <= 10#$H && 10#$H < 23)); then 
    echo between 1PM and 11PM 
else 
    echo go to bed 
fi 

"10 # $ H" là nội dung của biến, trong cơ sở 10.


trên thực tế, tốt hơn để sử dụng %k thay vì %H để tránh những vấn đề bát phân không hợp lệ.

H=$(date -d '08:45' "+%H") 
((13 <= H && H < 23)) && echo ok || echo no 
bash: ((: 08: value too great for base (error token is "08") 

so

H=$(date -d '08:45' "+%k") 
# ....................^^ 
((13 <= H && H < 23)) && echo ok || echo no 
no 
Các vấn đề liên quan