[英]Linux Bash. Send mailx from inside a while loop that reads lines of a file
[英]Linux bash. for loop and function, for adding numbers
我正在Linux中學習bash腳本,我想解決一個我認為很容易但我無法解決的問題。
我想插入數字作為參數,例如:
sh script.sh 5
如果我插入5(1 + 2 + 3 + 4 + 5)= 15,我想得到結果15
我想用功能來解決它。
n=$1
result=0
j=0
ADD(){
result=`expr $result + $j`
}
#for (( i=1; i<=$n; i++ ))
for i in {0..$n..1}
do
ADD
j=`expr $j + $1`
done
echo $result
每當我想添加數字時,我想調用函數進行添加。 我不知道我是否想象得對。 而且我不知道如何使用for循環。 我已經嘗試了兩種不同的for循環,我認為它們無法正常工作。
試試這個:
n=$1
sum=0
for i in `seq 1 $n` ; do
## redefine variable 'sum' after each iteration of for-loop
sum=`expr $sum + $i`
done
echo $sum
使用while循環並類似於您的代碼:
#!/bin/bash
n=$(expr $1 + 1)
result=0
j=0
add(){
result=$(expr $result + $j)
}
while test $j -ne $n
do
add
j=$(expr $j + 1)
done
echo $result
$(..無論..)類似於`..whatever..`,它執行你的命令並返回值。 測試命令非常有用,請查看該人。 在這種情況下,模擬for循環,比較條件$ j -ne $ n(j不等於n)並在循環的每個回合中將j加1。
你可以嘗試下面:
#!/usr/bin/env bash
sumit() {
local n=$1
local sum=0
for (( i=0;i<=n;i++ )) ; do
(( sum = sum + i ))
done
echo "$sum"
}
sum=$(sumit $1)
echo "sum is ($sum)"
這是一個棘手的版本:
sum_to () (
set -- $(seq $1)
IFS=+
echo "$*" | bc
)
sum=$(sum_to 5)
echo $sum # => 15
對於大數字來說,這是非常緩慢的:
$ time sum_to 1000000
500000500000
real 0m2.545s
user 0m2.513s
sys 0m0.189s
更高效
$ sum_to_2 () { { seq $1 | tr '\n' '+'; echo 0; } | bc; }
$ time sum_to_2 1000000
500000500000
real 0m0.727s
user 0m0.981s
sys 0m0.037s
更好:
$ sum_to_3 () { perl -le '$n=$ARGV[0]; $sum += $n-- while $n; print $sum' $1; }
$ time sum_to_3 1000000
500000500000
real 0m0.075s
user 0m0.071s
sys 0m0.002s
更糟糕的是:為每個號碼調用“外部”程序
$ sum_to_slow () {
sum=0
for i in $(seq $1); do
sum=$(expr $sum + $i)
done
echo $sum
}
$ date; time sum_to_slow 1000000; date
Mon Mar 17 14:00:53 EDT 2014
^C
$ date
Mon Mar 17 14:07:01 EDT 2014
幾分鍾后我按下Ctrl-C,看不到任何答案。 至少在bash中進行算術運算
$ sum_to_slow_improved () { sum=0; for i in $(seq $1); do (( sum += i )); done; echo $sum; }
$ time sum_to_slow_improved 1000000
500000500000
real 0m4.937s
user 0m4.869s
sys 0m0.124s
比Perl版本還慢2個數量級
一種典型的方式:
function summation()
{
sum=0
for((i=m; i<=n; i++))
{
sum=$((sum+i))
}
echo $sum
}
read m n;
summation $m $n
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.