Linux Shell编程 从初学到精通 习题答案 课后题答案(第八章)

时间:2021-11-03 22:28:05

这本书没有答案,给作者发邮件问了,他就没有提供答案。所以只好自己做题了

第五章

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
printf "%d\t" $i
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"

此方法未优化。