これらのbash機能を1つに変更するにはどうすればよいですか?

これらのbash機能を1つに変更するにはどうすればよいですか?

通常、ストップウォッチとして使用するために.bashrcファイルに保存されますが、時間単位の異なる複数のコマンドを使用して呼び出すと少し不便です。

function time_seconds()
{
  echo "Counting to $1 seconds"
  time_func $1
}

function time_minutes()
{
  echo "Counting to $1 minutes"
  time_func $1*60
}

function time_hours()
{
  echo "Counting to $1 hours"
  time_func $1*60*60
}

function time_flexible()  # accepts flexible input hh:mm:ss (does not work)
{
    echo "Counting to $1"
    secs=$(time2seconds $1)
    time_func $secs
}

ここに画像の説明を入力してください。

これらすべての機能、コマンドを1つの機能、1つのコマンドに変換したいと思います。多くの人は、このコマンドがsleepコマンドと同じくらい便利だと思います。まあ、必ずしもそうではありませんが…まだ非常に便利です。 sleep コマンドについて言えば、次のように動作します。たとえば、次のようになります。

sleep 5h 22m 44s

このコマンドをsleepコマンドとまったく同じ入力値を受け入れるストップウォッチコマンドに置き換えたいと思います。たとえば、次のようになります。

stopwatch 5h 22m 44s

どうやってこれを達成できますか?

psこの操作をより簡単で簡単にする変更を確認するには、ストップウォッチ表示出力を自由に変更してください。

ベストアンサー1

hm通常の秒、または接尾辞、および/または付いた正の整数で持続時間を取得すると仮定すると、s次は持続時間を秒単位で計算します(ただし、いいえ提供された引数(サフィックスなし)が実際に正の整数であること、サフィックスが正しく指定されていることを確認するために慎重な注意を払っていないことを確認してください。

to_seconds () {
    seconds=0

    for ts do
        case $ts in
            *h) seconds=$(( seconds + 60*60*"${ts%h}" )) ;;
            *m) seconds=$(( seconds +    60*"${ts%m}" )) ;;
             *) seconds=$(( seconds +       "${ts%s}" )) ;;
        esac
    done

    printf '%s\n' "$seconds"
}

関数内のループは与えられた引数を繰り返します。

パラメータ置換は、値の${ts%h}末尾から末尾(存在する場合)を削除します。h$ts

パラメータとして使用する場合は、5m 5m 5m秒から15分まで計算されます。

おそらく、この正確な形式(別の関数)ではありませんが、現在作成中のコードの一部としてコードで使用できるはずです。

テスト:

$ to_seconds 5h 22m 44s
19364
$ to_seconds 5h 22m 44
19364
$ to_seconds 44
44
$ to_seconds 10
10
$ to_seconds 10m
600
$ to_seconds 10h
36000
$ to_seconds 2i
bash: seconds +       2i: value too great for base (error token is "2i")

与えられた数値が整数であることを確認するには、次を参照してください。

おすすめ記事