2016-11-16 47 views
0

我只是在尋找一些指導,因爲我現在堅持並且一直在做同樣的事情。 「blah.txt」文件將是位置參數,然後我想繼續從它減去「20」的值,直到它小於或等於20.我還必須使用文件名的位置參數...從文件中扣除,直到值小於或等於20

#!/bin/bash 

value=$(cat "blah.txt") 


if [ "$value" -ge 20 ] 

then 

    until [ "$value" -le 20 ]; do 
      echo $((value - 20)) > $1 

    done 

fi 
+1

'/ bin/sh'是POSIX sh(在符合早期90年代標準的系統上),而不是'bash'。 (在20世紀70年代以後的系統中,它將是Bourne shell,它甚至更多*不是bash)。如果你使用'#!/ bin/sh' shebang,那麼'bash'標籤是不正確的。 –

+0

你是對的 - 我糾正了shebang,因爲我打算使用bash,我的歉意。 – v2kv

回答

0

假設value="100"。然後,你可以在算術表達式如下使用它:

until [ $value -le 20 ]; do 
    echo $value 
    ((value -= 20)) 
done 

輸出

100 
80 
60 
40 

如果你想從列表中排除100,移動算術表達式循環條件,如:

until (((value -= 20) <= 20)); do 
    echo $value 
done 

輸出

80 
60 
40 

如果你想包括20,然後-le(較小或等於)與-lt(較小),並用<=替換<

+0

它與第二個例子一起工作,但它只能減去40.任何想法是哪個部分導致的? – v2kv

+0

@ v2kv,這取決於你想達到什麼。對於'value = 100',第一個循環遍歷'{100,80,60,40}';第二個通過「{80,60,40}」。如果你想包含'20',則用'-lt'替換'-le',用'<'替換'<='。 –

+0

是的,我設法玩弄它並想出了那部分。在我的例子中,我認爲我的主要問題是我用算術表達式回顯的方式。非常感謝您的幫助! – v2kv

0

在我看來,你只是呼應$value - 20,但從來沒有真正存儲。基本上我們假設開始時的值是100。然後,你一直在屏幕上寫100-20 = 80,但從不實際減少變量的值。

+0

我應該注意$值會顯示一個包含在「blah.txt」中的數值(比如說,像200或300這樣的東西,沒關係)。然後使用「$ value -20」從「blah.txt」中的值中減去20,然後用$ 1存儲新值,其中「blah.txt」是參數。在這種情況下,它實際上是從值中減去的,但問題是它只會做一次...所以如果值是60,那麼它就變成了40,就是這樣。然後它只是在執行中掛起。 – v2kv