簡體   English   中英

UNIX:如何使我的腳本返回從命令行傳遞給它的數字的總和?

[英]UNIX: How do I make my script return the sum of the numbers passed to it from the command line?

這是我當前的代碼:

for i do
    sum=$(expr $sum + $i)
done
echo =$sum

現在可以使用,但是我希望它顯示所有數字。 例如,如果我輸入./sum 1 2 3,我希望它顯示1 + 2 + 3 = 6。 現在,它僅顯示答案。 另外,有沒有一種方法可以在沒有./的情況下執行文件。 例如,我可以使用sum 1 2 3代替./sum 1 2 3嗎?我試過chmod 700“ myfile”,但這似乎不起作用。

那這個呢?

while (( $# > 1 )); do
    printf "$1 + "
    sum=$((sum + $1 ))
    shift
done
echo "$1 = $((sum + $1))"

它遍歷您提供的參數,並將其添加到變量$sum 出於風格上的目的,我使用printf ,最后使用echo將所有內容放在同一行中。

這里解釋了shift的用法:

內置shift命令用於將位置參數“移位”給定數字n或1(如果未給出數字)。

測試

$ sh script.sh 1 2 3
1 + 2 + 3 = 6
$ sh script.sh 1 2 3 4 5
1 + 2 + 3 + 4 + 5 = 15

您可以使用IFS$*將所有參數與+結合在一起:

(IFS="+"; printf '%s' "$*")

sum=0
for i; do
    sum=$((sum + i))
done
printf '=%d\n' "$sum"

要在沒有./前綴的情況下運行,您需要將程序放在PATH中顯示的目錄中。 除非這不是給您使用的,否則您應該在主目錄中創建一個bin目錄,然后將其添加到.bash_profile

PATH=~/bin/:$PATH

以便將bin目錄添加到查找命令的位置列表中。

另一個答案:

sum=0
for i in $@
do
    sum=$(($sum + $i))
done
echo $sum

這里是沒有循環的解決方案:

numbers=$( printf -v str '%s+' $@; printf '%s' "${str%+}" )
sum=$(( $numbers ))
echo $numbers=$sum 

第一行將輸入參數與+相連,第二行計算總和,第三行輸出等式

至於問題的第二部分。 只需將腳本放在路徑中的某個位置即可(例如/ usr / local / bin)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM