Zkuste toto:
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
Se smyčkou while a podobnou vašemu kódu:
#!/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
$(..cokoli..) je podobné jako `..cokoli..`, provede váš příkaz a vrátí hodnotu. Testovací příkaz je velmi užitečný, podívejte se na muže. V tomto případě simuluje cyklus for porovnáním podmínky $j -ne $n (j se nerovná n) a přidáním 1 k j var v každém otočení cyklu.
Můžete to zkusit níže:
#!/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)"
příkaz find ve skriptu bash, který má za následek Žádná chyba souboru nebo adresáře pouze pro adresáře?
Proč nebyl příkaz sudo:bundle nalezen?