Shell脚本编程题(八道)

Shell脚本编程题(八道)

第一题

1.编程实现从键盘获取一个整数,按下列情况输出对应结果:

(1)当该数值为 6 或 7 时,输出“休息日(Rest Day)”。

(2)当该数值为 1 至 5 时,输出“工作日(Working Day)”。

(3)其他情况输出“输入错误(Error Input)”

#!/bin/sh
read datetime 
case "$datatime" in
     6|7)
         echo '休息日(Rest Day)'
         ;;
     1|2|3|4|5)
         echo '工作日(Working Day)'
         ;;
     *)
         echo '输入错误(Error Input)'
         ;;
esac

第二题

2.编程实现从键盘获取一个字符后,当该字符为字母时输出“It’s a letter.”,当该字符为数字时输出“It’s a number.”,其他情况时输出“Unknown.”。

#!bin/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 ]; then
    echo "输入错误(Error Input)"
elif [ "$value" -ge 60 ]; then
    echo "通过(Passed)"
else
    echo "失败(Failed)"
fi

第四题

  1. 输出九九乘法表至“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);
    do
        for y in $(seq 1 $x);
        do
            printf "$x*$y=$(($x*$y)) \t"
        done
        echo
    done > 99.txt
    

第五题

5.编程实现求出所有两位数质数,并且把它们按行追加到“prime.lst”文件中。

#!/bin/sh

# 遍历两位数(10 到 99)
for a in $(seq 10 99); do
    # 假设是质数
    is_prime=1

    for b in $(seq 2 $(($a - 1))); do
        if test $(($a % $b)) -eq 0; then
            # 如果找到因子,标记为非质数
            is_prime=0
            break
        fi
    done

    # 如果是质数,写入文件
    if test $is_prime -eq 1; then
        echo "$a" >> prime.lst
    fi
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  # 从第3个数开始计算
while [ $startnum -le 10 ]; do
    temp=$((num1 + num2))  # 计算下一个数
    num1=$num2  # 更新 num1
    num2=$temp  # 更新 num2
    printf ",$temp" >> fib  # 追加结果到文件
    startnum=$((startnum + 1))  # 增加计数器
done


第七题

7.使用重定向和循环从“price”文件中循环读入每一行表示价格的数据并输出它们 9 折后的整数值至“price.new”文件中。

#!/bin/sh

while read itemprice; 
do
echo $(($itemprice*90/100))
done < price > price.new

第八题

8.已知“sales”文本文件中每行保存着某商品的销售数量,使用重定向输入和循环读出这些数据并输出它们的和。

#!/bin/sh
total=0
while read amount; 
do
    total=$(expr $total +amount);
done < sales
echo $total

posted @ 2024-12-22 19:59  "Return"  阅读(177)  评论(0)    收藏  举报