Shell脚本编程题(八道)
第一题
1.编程实现从键盘获取一个整数,按下列情况输出对应结果:
(1)当该数值为 6 或 7 时,输出“休息日(Rest Day)”。
(2)当该数值为 1 至 5 时,输出“工作日(Working Day)”。
(3)其他情况输出“输入错误(Error Input)”
#!/bin/sh
read datetime
case "$datatime" in6|7)echo '休息日(Rest Day)';;1|2|3|4|5)echo '工作日(Working Day)';;*)echo '输入错误(Error Input)';;s
esac
第二题
2.编程实现从键盘获取一个字符后,当该字符为字母时输出“It’s a letter.”,当该字符为数字时输出“It’s a number.”,其他情况时输出“Unknown.”。
#!bash/sh
read letter
case "$letter" in [a-zA-Z])echo 'It's a letter.';;[0-9] )echo 'It's a number.';;*)echo 'Unknown.';;
esac
第三题
3.编程实现从键盘获取一个表示成绩的数值,按下列情况输出对应结果:
(1)若该数值小于 0 或大于 100,则输出“输入错误(Error Input)”。
(2)若该数值范围为 60-100,则输出“通过(Passed)”。
(3)若该数值范围为 0-59,输出“失败(Failed)”。
#!/bin/sh
read value
if [ "$value" -lt 0 ] || [ "$value" -gt 100 ]; thenecho "输入错误(Error Input)"
elif [ "$value" -ge 60 ]; thenecho "通过(Passed)"
elseecho "失败(Failed)"
fi
第四题
-
输出九九乘法表至“99.txt”文件中,格式如下:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
#!/bin/sh for x in $( seq 1 9) dofor y in $(seq 1 $x)doprintf "$x*$y=$(($x*$y)) \t"doneecho done > 99.txt
第五题
5.编程实现求出所有两位数质数,并且把它们按行追加到“prime.lst”文件中。
#!/bin/sh# 遍历两位数(10 到 99)
for a in $(seq 10 99); do# 假设是质数is_prime=1# 检查因子,只需到 sqrt(a)for b in $(seq 2 $(echo "sqrt($a)" | bc)); doif test $(($a % $b)) -eq 0; then# 如果找到因子,标记为非质数is_prime=0breakfidone# 如果是质数,写入文件if test $is_prime -eq 1; thenecho "$a" >> prime.lstfi
done
第六题
6.斐波那契(Fibonacci)数列,又被称为黄金分割数列。第 1 项为 1,第 2 项为 1,从第 3 项开始每一项为前两项之和,即 2、3、5、8……。编程实现将前 10 项以逗号分隔的格式输出至名称为“fib”的文件中。
#!/bin/sh
num1=1
num2=1
echo -n “$num1,$num2”>fib
startnum=3
while test $n -le 10; dotemp=$((num1+num2))num1=$num2num2=$tempprintf “,$f” >> fibstartnum=$((startnum+1))
done
第七题
7.使用重定向和循环从“price”文件中循环读入每一行表示价格的数据并输出它们 9 折后的整数值至“price.new”文件中。
#!/bin/shwhile read itemprice;
do
echo $(($itemprice*90/100))
done < price > price.new
第八题
8.已知“sales”文本文件中每行保存着某商品的销售数量,使用重定向输入和循环读出这些数据并输出它们的和。
#!/bin/sh
total=0
while read amount;
dototal=$(expr $total +amount);
done < sales
echo $total