Shell-Script

shell Unix 中的計算

  • November 7, 2019

我正在嘗試計算 2 次 unix 的差異以進行簡單的計算(在 shell 腳本中),但它似乎不起作用。

我已經設置$d了 2 個變數,一個稱為另一個$c

這是我目前用於設置變數的語法:

c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $c
d= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $d

(變數 a 和 b 只是從另一個腳本接收時間戳)

我正在嘗試減去$cfrom的輸出,$d但我使用的每種方法似乎都不起作用。

我嘗試了以下方法:1)

duration=$(echo "$d - $c")
echo $duration 
duration=$((d-c))
echo $duration 
c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'

您在這裡缺少命令替換。這將只執行echo | awk管道,同時cecho.

您在下面使用了命令替換 in duration=$(echo "$d - $c"),這也是您在這裡需要的。IE

c=$(echo "$a" | awk  ...)

(請注意,符號周圍沒有空格=,這就是將普通賦值與命令分開的原因,請參閱shell 腳本中變數賦值中的空格

此外,查看 awk 腳本中的數字,您似乎有 31 天的月份,因此有 372 天的年份,這可能是您想要的,也可能不是。如果您的輸入也有秒數,則 awk 腳本不會使用它們。(最後應該有 a+ $6嗎?)$a兩個命令中也有,而不是$aand $b

duration=$(echo "$d - $c")

這只會設置duration為一個字元串,例如(具有and5678 - 1234的實際值),因為只是列印給定的內容,它不進行算術運算。d``c``echo

duration=$((d-c))

這應該可以做減法。

引用自:https://unix.stackexchange.com/questions/550900