Điểm:-1

Làm thế nào để so sánh thời gian trong nếu điều kiện?

lá cờ us
#!/bin/bash
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# đầu ra: 17:00
sub_time=$(date -d"${tag} +1:00" +'%H:%M')đầu ra: 16:00
current_time=$(date |awk 'NR==1{print $4}' đầu ra: 05:51:16
nếu [[ "$sub_time" -ge "$current_time" ]];thì
   crontab <<EOF
   */15 * * * * bash server_shutdown.sh
EOF
fi

Tôi muốn so sánh "current_time" trong hệ thống hiện tại với thẻ tắt máy ảo từ VM với "sub_time" thông qua điều kiện if.

pLumo avatar
lá cờ in
Bạn đang cố làm gì vậy? Thời gian phụ là gì? Tại sao 17:00+1 = 16:00? Tại sao bạn sử dụng `awk` để lọc đầu ra của `date` thay vì sử dụng chuỗi định dạng `date`? Cái gì không hoạt động (bất kỳ lỗi nào)? Rõ ràng là `-ge` chỉ có thể so sánh các số nguyên... nhưng bạn vẫn nên thêm điều này vào câu hỏi.
Điểm:1
lá cờ in

Sẽ an toàn hơn nếu chuyển đổi ngày tháng chuỗi thành dấu thời gian:

%S giây kể từ 1970-01-01 00:00:00 UTC

[[ $(date +%s -d "$sub_time") -ge $(date +%s -d "$current_time") ]]

Tất nhiên bạn có thể trực tiếp làm điều này khi tạo các biến:

sub_time=$(date -d"${tag} +1:00" +%s)
current_time=$(ngày +%s)
nếu [[ $subtime -ge $current_time ]]; sau đó
   ...
fi

  • Thay vì tạo thời điểm hiện tại một mình, bạn có thể sử dụng biến bash $EPOCHGIÂY (đánh đập > 5.0).
  • Bạn cũng có thể sử dụng bản inf thay vì ngày tháng để tạo ra nó: printf -v current_time '%(%s)T'

Xin lưu ý rằng các tùy chọn này có thể không dễ mang theo.

Haridvpsk avatar
lá cờ us
azureuser@puppetclient-ubuntu:~$ echo $current_time "1632388663" azureuser@puppetclient-ubuntu:~$ echo $sub_time 1632384000 điều kiện khác đang được thực hiện tại sao.?
Điểm:0
lá cờ li
#!/bin/bash
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# đầu ra: 17:00
sub_time=$(date -d"${tag} +1:00" +'%H:%M')#output: 16:00
current_time=$(date |awk 'NR==1{print substr($5,0,5)}')#output: 05:51
# trên hệ thống của tôi, trường thứ 5 có thời gian trong khi trường thứ 4 có năm.
# vì vậy tôi đã thay đổi điều đó trong awk
if [[ "$sub_time"> "$current_time" ]];thì # so sánh được thực hiện theo từ điển
   crontab <<EOF
   */15 * * * * bash server_shutdown.sh
EOF
fi
pLumo avatar
lá cờ in
Thay vì lọc đầu ra `date` bằng `awk`, tại sao không chỉ đơn giản sử dụng `date +%H:%M` ?
Haridvpsk avatar
lá cờ us
sau nếu điều kiện được thỏa mãn thì công việc định kỳ của tôi không được tạo tại sao?
Haridvpsk avatar
lá cờ us
Cảm ơn rất nhiều Mr.PLumo & Mahek, cả hai câu trả lời đều phù hợp với tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.