退勤時にビープ音を鳴らす Bash スクリプト

退勤時にビープ音を鳴らす Bash スクリプト

スクリプトは数時間ビープ音を鳴らします。つまり、10時にスクリプトを実行するとビープ音が10回鳴ります。そして3秒ほど停止した後、分が15~30分なら1回鳴らし、30~45分なら2回鳴らし、45~60分なら2回鳴らさなければなりません。 、ビープ音を3回鳴らさなければならなかった。最初の15分間はビープ音を鳴らさないでください。これまで私が思いついた内容は次のとおりです。

#!/bin/bash
time=$(date +%I)
count=0
while test $count -lt $time; do
echo -e "\a"
sleep 1 # sleep for one second
let count=count+1
done
sleep 3
minute=$(date +%M)
if test $minute -gt 15 && $minute -lt 30; then
echo -e "\a"
elif test $minute -gt 30 && $minute -lt 45; then
echo -e "\a"
echo -e "\a"
elif test $minute -gt 45 && $minute -lt 60; then
echo -e "\a"
echo -e "\a"
echo -e "\a"
else echo "No Chime"
fi

コードの最初の部分は正常に動作します。たとえば、時間が11時25分の場合、ブザーが11回鳴り、3秒間停止します。しかし、それ以後はビープ音は出ませんでした。

line 11: 25: command not found
line 13: 25: command not found

また、shellcheckを確認しましたが、エラーは返されませんでした。しかし、コードが機能していないようです。

どのように機能させますか?

ありがとう

ベストアンサー1

エラーは次のとおりです。

elif test $minute -gt 30 && $minute -lt 45; then

組み込みtestコマンドです。だから上記の行が実行されていますcommand1 && command2。しかし、testAfterがないので、コマンドで実行しよ&&うとしましたが失敗します。$minuteあなたはもともと次のように書きたかったのです。

elif test $minute -gt 30 && test $minute -lt 45; then

次も同様です。

elif test $minute -gt 45 && test $minute -lt 60; then

つまり、コードをインデントする習慣が必要です。読みやすさが大幅に向上し、まともな編集者なら誰でもこれを行います。また、分が正しい30か(小さいか等しい)かわりに(小さい)を45使用しているため、スクリプトは機能しません。したがって、より良いスクリプトバージョンは次のようになります。-lt-le

#!/bin/bash
time=$(date +%I)
count=0
while [ "$count" -lt "$time" ]; do
        echo -ne "\a"
        sleep 1 # sleep for one second
        let count=count+1
done
sleep 3
minute=$(date +%M)
if [[ $minute -gt 15 && $minute -le 30 ]]; then
     echo -ne "\a"
elif [[ $minute -gt 30 && $minute -le 45 ]]; then
        echo -ne "\a\a"
elif [[ $minute -gt 45 && $minute -lt 60 ]]; then
        echo -ne '\a\a\a'
else
        echo "No Chime"
fi

12:00:01もちろん、あまりにも多くの時間がかかったため、ビープ音が示す時間はスクリプトを起動した時間11:00ではありません(たとえば、11:59:50に実行するとビープ音が11回鳴ります。)にあると思うようになります 正しい時間にビープ音が鳴るようにスクリプトの始めに と を設定したくない11:15ですか?timeminute

おすすめ記事