2013-04-26 18 views
2

變量,這是我的腳本,我在UNIX上運行(AIX):提取兩個在UNIX

$MON date +"%m" 
echo 'expr $MON - 2' 

輸出:

04 
expr $MON - 2 

我只是想從我目前的一個月,顯示扣2 。

感謝adavance

+1

那麼萬一月份是0或1,你想表現什麼? – abasu 2013-04-26 13:12:45

回答

1

試試這個:

MON=$(date +"%m") 
echo $(($MON-2)) 

你並不需要使用expr因爲Bash可以進行簡單的算術也。

如果你的shell不支持算術表達式,使用expr

expr $MON - 2 

在這兩種情況下,你會得到2作爲輸出。

+1

- 2「)語法錯誤:算術運算符無效(錯誤標記爲」 「作爲輸出,這就是輸出 – 2013-04-26 10:55:50

+0

您沒有正確分配MON,使用'MON = $(date +」%m「)''在我的答案。 – dogbane 2013-04-26 10:57:49

+1

我複製粘貼相同的東西,仍然錯誤仍然存​​在。 – 2013-04-26 11:02:00

2

我認識到,在AIX默認的shell是ksh一些變體,它不從同樣的缺陷作爲輸入基地bash吃虧,但它是值得銘記如果你最終在其他平臺上遇到此。

如果這是您輸入:

$MON date +"%m" 
echo 'expr $MON - 2' 

那麼你有幾個問題。

  • $MON沒有設置,從而導致線date +"%m",這使輸出04
  • 爲你使用了錯誤的一種蜱的echo命令不執行expr命令的調用,這將導致輸出expr $MON - 2

首先,指定你做VARIABLE=value變量,你的情況,這應該是:

MON=`date +"%m"` 

請勿在=標誌之前或之後放置空格。

其次,執行EXPR,您需要使用反引號(`

echo `expr $MON - 2` 

然而,對於大多數貝殼,你應該使用的更現代的版本,我想要得到的結果命令,這是邏輯$(command)。這些可以嵌入,這使得它們更容易理解(反引號需要轉義,並且越多反轉就越需要轉義,這很快導致反斜槓)。 對於bash,您需要確保月份被解釋爲基數爲10的數字,否則一旦您打到8月份,代碼將停止工作:

要強制數字被解釋爲基數爲10的數字,與10#

MON=10#$(date +"%m") 
echo $(($MON-2)) 

例子:

bash-3.2$ month=07 
bash-3.2$ echo $(($month + 1)) 
8 
bash-3.2$ month=08 
bash-3.2$ echo $(($month + 1)) 
bash: 08: value too great for base (error token is "08") 
bash-3.2$ month=10#08 
bash-3.2$ echo $(($month + 1)) 
9 
0

另一種選擇:如果你想看到11或12一月或二月,讓GNU date做算術:

date -d "-2 months" +%m