这本书没有答案,给作者发邮件问了,他就没有提供答案。所以只好自己做题了
第五章
5.1
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
Q Cai-English-1984-Jiangsu-7
cat passwd|sort -r -n -t":" -k3 |awk -F":" '{print $1"\t"$3,$4,$5}'
第八章
8.1 1~100内偶数相加,使用for,while,until分别实现。
#!/bin/bash
#use for
sum1=0
for ((i=1;i<=100;i++))
do
if [ $(($i%2)) -eq 0 ]
then sum1=$(($sum1+$i))
fi
done
echo "sum1="$sum1
#use while
sum2=0
j=0
while [ $j -le 100 ]
do
sum2=$(($sum2+$j))
j=$(($j+2))
done
echo "sum2="$sum2
#use until
sum3=0
k=0
until [ $k -gt 100 ]
do
sum3=$(($sum3+$k))
k=$(($k+2))
done
echo "sum3="$sum3
8.2 用while实现从命令行读取字符串,知道输入的字符串为句号为止。
#!/bin/bash
read -p "please input:" args
while [ "$args" != "." ]
do
read -p "not right,please input:" args
done
echo "right!"
8.3 不相同
8.4 用for 实现输出2,4,8,16,32,64,用while和until同样实现
#!/bin/bash
i=2
for((j=1;j<=5;j++))
do
i=$(($i+$i))
printf "%d\t" $i
done
printf "\n"
8.5 循环实现从1开始叠加,直到和结果大于2000为止
#!/bin/bash
i=1
sum=0
while [ "a" = "a" ]
do
sum=$(($sum+$i))
echo $sum
if [ $sum -ge 2000 ]
then break
fi
done
8.6 100以内被3整除的数,每行显示8个。
#!/bin/bash
j=1
for ((i=1;i<=100;i++))
do
if [ $(($i%3)) -eq 0 ]
then
printf "%d" $i
if [ $j -lt 8 ]
then printf "\t"
let "j++"
else
printf "\n"
j=1
fi
fi
done
printf "\n"
8.7 打印*图形。
*
***
*****
*******
*********
#!/bin/bash
i=0
k=1
for((j=1;j<=6;j++))
do
while [ $k -lt $i ]
do
echo -n "*"
k=$(($k+1))
done
printf "\n"
i=$(($i+2))
k=1
done
8.8 输入整数,计算各位数字之和,判断是否能被9整除,此和能,则此数能,输出结果。
#!/bin/bash
read -p "input a number:" num
sum=0
j=$num
while [ $num -gt 0 ]
do
j=$num%10
num=$(($num/10))
sum=$(($sum+$j))
done
echo "sum="$sum
if [ $(($sum%9)) -eq 0 ]
then
echo "yes,the number can be divisible by 9"
else
echo "no,the number cannot be divisible by 9"
fi
8.9 提示输入一些整数,计算这些整数中奇数之和与偶数之和
8.10 判断一个整数是否为质数。素数(偶数只有2是素数,奇数并且不能被任何一个小于或等于它平方根的奇数整除,则是素数)
#!/bin/bash
read -p "input:" in
if [ $(($in%2)) -eq 0 ]
then
if [ $in -eq 2 ]
then
echo "yes"
else
echo "no"
fi
else
for ((i=1;i<$in;i++))
do
if [ $(($in%$i)) -eq 0 ]
then
echo "no"
exit 0
fi
done
fi
echo "yes"
此方法未优化。