shell腳本計算
❶ Linux,編寫一個Shell腳本,計算200以內(包含200)所有3的整數倍的數字的和
#!/bin/bash
sum=0;
i=0;
while ((i <= 200));do
((sum = sum + i));
((i = i + 3));
done;
echo $sum;
❷ 設計一個shell腳本:計算並輸出S=1!+2!+ ...+10!的結果
#! /bin/bash
#注意,填寫你自己機器上的bash路徑,可以用type -a bash命令確定bash路徑,並確認其是否在下面的PATH中
export PATH=/bin:/usr/bin:
s=0
for (( i=1; i<=10; ++i ))do
s0=1
for (( j=1; j<=$i; ++j ))do
s0=$(($s0*$j))
done
s=$(( $s0+$s ))
done
echo "1!+2!+...+10!=$s"
❸ shell腳本,函數返回值計算
<-/DATA/data01/zz->$echo$(1+2)
-bash:1+2:commandnotfound
<-/DATA/data01/zz->$echo$((1+2))
3
<-/DATA/data01/zz->$
$()表示執行裡面的命令,與``一樣,$(())是計算,1+2不可執行,返回錯誤的非0碼。
❹ shell腳本求平均值
$vim test.sh
1 #!/bin/bash
2
3 for i in $* ; do
4 let "avg += $i"
5 done
6 let "avg /= $#"
7 echo "Average : $avg"
$chmod +x test.sh
$./test.sh 1 2 3 4 5
Average : 3
希望對您有幫助,~
❺ shell中如何按位運算
語法
$((...))
$ echo $(( 3 * 4 )) 12
在某些場景特別方便,可以免去寫程序的煩瑣,如驗證某些運算。
下面是驗證《深入理解計算系統》練習題2.12的場景
表達式 ~0 將生成一個全1的掩碼,不管機器的字大小是多少,可移植。
$ printf "%x\n" $(( ~0 ))ffffffffffffffff
$ printf "%#x\n" $(( ~0 ))0xffffffffffffffff
上面的測試顯示,shell中,0按位取反後的值是64位的。
shell的printf命令前導字元列印:《shell腳本學習指南》表7-4:printf的標志中描述了格式參數中"#"號的意義,"#"可以用以輸出前導"0x"(16進制)、"0"(8進制)
x & 0xFF 生成一個由x的最低有效位元組組成的值
$ printf "%#x\n" $(( 0x89ABCDEF & 0xFF ))0xef
$ printf "%#.8x\n" $(( 0x89ABCDEF & 0xFF ))0x000000ef
以下x = 0x87654321
A.x的最低有效位元組,其他位均置為0
$ printf "%#.8x\n" $(( 0x87654321 & 0xFF )) 0x00000021
$ printf "%#.8x\n" $(( 0x87654321 & ?0xFF ))-bash: 0x87654321 & ?0xFF : syntax error: operand expected (error token is "?0xFF ")
書中給出的練習題的答案是 「x & ?0xFF」,這里的"?"號經驗證,shell無法正確運行。
B.除了x的最低有效位元組外,其他的位置都取補,最低有效位元組保持不變。
$ printf "%#x" $(( 0x87654321 ^ ~0xff))0xffffffff789abc21
上面因為~0xff會生成64位的掩碼,所以結果有些不符合預期,但後32位是符合預期的。
C.x的最低有效位元組設置成全1,其他位元組都保持不變。
$ printf "%#x" $(( 0x87654321 | 0xff ))0x876543ff
❻ LINUX:編寫一個shell腳本,並利用函數實現數列求和運算
#!/bin/bash
sum=0
if[$#-ne2]
then
echo"Pleaseinputtwonumbers!"
elif[$1-gt$2]
then
echo"."
else
foriin$(seq$1$2)
do
sum=`expr$sum+$i`
done
echo""$1~$2"sumis$sum"
fi
#執行結果
#[root@localhostopt]#./b.sh36
#"3~6"sumis18
#[root@localhostopt]#./b.sh3
#Pleaseinputtwonumbers!
#[root@localhostopt]#./b.sh356
#Pleaseinputtwonumbers!
#[root@localhostopt]#./b.sh32
#.
#[root@localhostopt]#./b.sh325
#"3~25"sumis322