我有這個bash腳本,我在第16行遇到了問題。如何獲取第15行的先前結果並將其添加到第16行的變量中? html
#!/bin/bash num=0 metab=0 for ((i=1; i<=2; i++)); do for j in `ls output-$i-*`; do echo "$j" metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15) num= $num + $metab (line16) done echo "$num" done
我也很是喜歡這種方法,不那麼雜亂: node
count=$[count+1]
我老是忘記語法,因此我來谷歌,但後來我找不到我熟悉的那個:P。 這對我來講是最乾淨的,對我在其餘語言中所指望的更爲真實。 shell
i=0 ((i++)) echo $i;
#!/bin/bash read X read Y echo "$(($X+$Y))"
另外一種可移植的POSIX
兼容方式,用於bash
,能夠在.bashrc
定義爲一個函數,方便全部算術運算符。 bash
addNumbers () { local IFS='+' printf "%s\n" "$(( $* ))" }
並在命令行中調用它,由於, 函數
addNumbers 1 2 3 4 5 100 115
咱們的想法是使用輸入字段分隔符(IFS) ,這是bash
一個特殊變量,用於擴展後的單詞拆分以及將行拆分爲單詞。 該函數在本地更改值以使用分詞字符做爲sum運算符+
。 spa
記住IFS
局部改變,並沒有考慮對默認效果IFS
的功能範圍以外的行爲。 man bash
頁面的摘錄, 命令行
shell將IFS的每一個字符視爲分隔符,並將其餘擴展的結果拆分爲這些字符上的單詞。 若是未設置IFS,或者其值正好是默認值,則會忽略先前擴展結果的開始和結束的,以及序列,而且不在開頭或結尾的任何IFS字符序列用於分隔話。 code
"$(( $* ))"
表示傳遞給+
的參數列表,而後使用printf
函數輸出和值。 該函數能夠擴展爲其餘算術運算添加範圍。 htm
您應該將metab聲明爲整數,而後使用算術評估 get
declare -i metab num ... num+=metab ...
有關更多信息,請參閱https://www.gnu.org/software/bash/manual/html_node/Shell-Arithmetic.html#Shell-Arithmetic