Linux操作系统期末程序题

这篇博客介绍了如何在Linux环境中进行一系列操作,包括求最大值、绘制图形、计算和、输入输出处理、文件编辑等。通过具体的Shell脚本示例,展示了如何实现循环输入学生成绩判断、两数相加、阶乘计算等功能。此外,还详细阐述了使用vi编辑器进行文件操作,如剪切、粘贴、替换和插入,以及统计文件信息。最后,给出了将当前目录下所有.c文件复制到指定目录的Shell脚本,并按大小排序列出文件清单。
摘要由CSDN通过智能技术生成

输入三个数,求最大值

echo "please enter three number"
read a b c
if [ "$a" -ge "$b" ]
then if [ "$a" -ge "$c" ]
     then echo "$a"
     else echo "$c"
     fi
elif [ "$b" -ge "$c" ]
then echo "$b"
else echo "$c"
fi

在这里插入图片描述

输出一个等腰三角形

       for ((y=4;y>i;y--))
        do
           echo -n " "
        done
        for ((j=2;j<=i;j++))
        do
           echo -n "*"
        done
        for ((j=1;j<=i;j++))
        do
           echo -n "*"
        done
    done
echo -e ""

等腰三角形

输出1-100的和

sum=0
for(( i=1;i<=100;i++ ))
do
let sum=$sum+$i
done
echo "$sum"

在这里插入图片描述

根据键盘可以循环输入学生成绩判断是否合格

while true
do
   echo "please enter the score:"
   read x
   case $x in
     [0-9]|[1-5][0-9]) echo "failed!";;
     [6-9][0-9]|100) echo "passed!";;
     q) exit;;
     *) echo "error!";;
   esac
done

在这里插入图片描述

实现两个数的和

read a b
sum=`expr $a + $b`
echo $sum

在这里插入图片描述

输出5的阶乘(5!)

sum=1
for((i=5;i>0;i--))
do
sum=$((sum*i))
done
echo "$sum"

在这里插入图片描述

输出字符

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

x=0
while [ $x -lt 10 ]
do 
   y=" $x"
   while  [ "$y" -ge 0 ]
   do 
      echo -e "$y \c"
      y=`expr $y - 1`
   done
   echo
   x=`expr $x + 1`
done

在这里插入图片描述

输出字符

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5

n=0
while [ "$n" -lt 6 ]
  do
    x=0
    echo -e "$x \c"
    x=`expr $x + 1`
    while [ "$x" -le "$n" ]
      do
         echo -e "$x \c"
         x=`expr $x + 1`
      done
    echo
    n=`expr $n + 1`
  done

在这里插入图片描述

打开vi编辑器,进行如下操作:

(1) 插入2019年日历,并把该文件命名为2019.txt。
答:
用vi打开编辑器,进入新的文件编辑时,转到底行命令,输入命令
:r !cal 2019
即插入2019年日历,然后再执行底行命令
:w 2019.txt
即把该文件存盘命名为2019.txt。

(2) 把4、5、6月的日历整体向右移动一个制表位。
答:
在命令模式下,把光标移到4、5、6月的行首,执行命令

7
即把4、5、6月的日历整体向右移动一个制表位。

(3) 把该日历的标题“2019”改为“2019年全年日历”。
答:
把光标移到日历标题位置,在输入模式下把日历的标题“2019”改为“2019年全年日历”。

(4) 删除1、2、3月的日历,然后予以恢复。
答:
把光标移到1、2、3月的日历行首,执行命令
d8G
其中8为1、2、3月的日历最底行的行号。
再按u键予以恢复。

(5) 把7、8、9月的日历整体移到日历的最后面。
答:
该操作为把7、8、9月的日历先整体剪切,然后再到日历最底行,再粘贴的过程,操作如下:
先把光标移到7、8、9月的日历的行首,7、8、9月的日历整体占6行,执行剪切命令
"a6dd
即把7、8、9月的日历整体占的6行剪切到a的缓存区中;
把光标移到日历的最底行,执行粘贴命令
"ap

(6) 依次检索字符串“30”,如果每个月的最后一天为“30”,则删除该字符串“30”。
答:
该操作为检索命令,再判断每个月的最后一天是否为“30”,再进行删除该字符串“30”,操作如下:
执行字符串检索命令:
/30
首先检索到第一个“30”,再判断该月的最后一天是否为“30”,如果是则执行命令
d2l
删除该字符串“30”,然后按n键,检索下一个“30”字符串,以此类推进行操作。

(7) 显示行号。
答:
执行底行命令
:set number

(8) 在该vi编辑器中统计该文件的大小。
答:
在该vi编辑器中统计该文件的大小,首先把该文件进行存盘,比如存盘命名为2019.txt,则可以在vi中执行shell命令
:!wc 2019.txt

已知有两个文本文件f1和f2,把f1文件中的第5~9行剪切并插入粘贴到f2文件的第3行后,再把f2文件中的所有read字符串全部改写成reading,最后在f1文件后附加上当前时间。利用vi编辑器写出以上操作步骤及其相关命令。

答:
首先用vi打开两个文本文件f1和f2,执行命令如下
vi f1 f2
此时编辑为f1下,把光标移到第5行,执行剪切命令
"b5dd
然后把剪切后的f1存盘
:w
之后转到编辑f2文件下
:n
进入到f2下把光标移到第3行,执行粘贴命令
"bp
粘贴后,把f2文件中的所有read字符串全部改写成reading,执行全局替换命令
:g/read/s//reading/g
最后在f1文件后附加上当前时间,操作如下:
当前为f2文件的编辑状态下,先把f2存盘,后返回f1的编辑状态下
:w
:e#
进入到f1编辑状态下后,把光标移到最低,执行插入shell命令,插入当前时间
:r !date

编写一个Shell脚本,利用for循环把当前目录下的所有*.c文件复制到指定的目录中,并显示复制后该目录内按文件大小排序的目录文件清单。

答:
echo “please confirm directory name:”
read dir
if [ -d $dir ]
then
for filename in *.c
do
cp $filename $dir
done
ls -l d i r ∣ s o r t − n − r − k 5 e l s e e c h o " b a d d i r e c t o r y n a m e : dir | sort -n -r -k 5 else echo "bad directory name: dirsortnrk5elseecho"baddirectoryname:dir"
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值