燕山大学Linux实验shell程序设计

这篇具有很好参考价值的文章主要介绍了燕山大学Linux实验shell程序设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文仅是分享代码设计思想和对书上代码解读仅供参考严禁抄袭!!!

主要是编写shell代码部分问题:

注:for i相当于for i in $* (取全部位置参数)下文存在不在赘述

4.对教材例题4.9 (P108)进行编辑,然后执行。

#!/bin/bash
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
shift
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 4
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9

燕山大学Linux实验shell程序设计

 这个题目主要是对执行的位置参数进行的一个操作,将位置参数从0到9进行输出同时也有shift命令,移动1位和移动4位的移动后的显示但是0号位置参数是不会发生改变的!

5.对教材例题4.19 (P132)进行编辑,然后执行。

#!/bin/bash
func()
{
 echo "Let's begin now."
 echo $a $b $c
 echo $1 $2 $3
 echo "The end."
}
a="Working directory"
b="is"
c=`pwd`
func Welcome You Byby
echo "Today is `date`"

燕山大学Linux实验shell程序设计

 这个主要是考察了shell程序设计的函数这个功能,在函数传参数的时候可以是在程序里面的参数可以直接调用例如:a,b,c这三个参数。也可以是在 调用这个函数的时候传入的三个参数如Welcome You Byby在这里面就是作为位置参数传进去的。

6.对习题4.8 (P141)进行编辑,然后执行。

#!/bin/bash
count=$#
cmd=echo
while [ $count -gt 0 ]
do
  cmd="$cmd \$$count"
  count=$(($count-1))
done
eval $cmd

燕山大学Linux实验shell程序设计

注意:第5版Linux教程这本书里面的这个例子是错误的!!无法正常运行需要将while循环里面的count语句进行修改,修改为count=$(($count-1))。

这个题目主要是将参数进行了一个逆序的输出

$#是特殊Shell变量,指的是参数的个数。

cmd="$cmd \$$count" $cmd为echo,\$$count表示最末一个参数,整个语句表示输出最末一个参数

count=$(($count-1))表示参数数量减一

eval $cmd表示运行cmd中的命令

7.对习题4.9进行设计,然后调试、执行。编写一个shell脚本,它把第二个位置参数及以后的各参数指定的文件复制到第一个位置参数指定的目录当中。

dir=$1
shift
for i
do
  cp $i $dir
done

燕山大学Linux实验shell程序设计

 首先利用位置参数将第一个位置参数的目录传给dir同时移动一位留下剩下的位置参数,再利用一个for循环以及cp命令将文件复制到指定的目录当中。

8.对习题4.11进行设计,然后调试、执行。

打印指定目录下的某些文件,由第一个参数指出文件所在目录,其余参数是要打印的文件名。

dir=$1
cd $dir
shift
for i
do
pr $i
done

燕山大学Linux实验shell程序设计

 这个问题就是也是同样的道理先利用位置参数得到目录然后通过cd命令先转移到所在的目录然后也是shift命令移动一位利用for循环进行一个遍历在遍历的过程中进行pr命令打印。

9.对习题4.13进行设计,然后调试、执行。利用数组的形式存放10个城市的名字,然后利用for循环把他们循环打印出来。

#!/bin/bash
declare -a city
city=(北京 上海 天津 深圳 石家庄 南京 杭州 苏州 拉萨 沈阳)
for i in {0..9}
do
  echo ${city[$i]}
done

燕山大学Linux实验shell程序设计

这个题目考察的就是一个数组的使用。主要就是定义一个数组(在这里我定义数组实际上是多啰嗦了一句,可以直接进行数组赋值因为shell是弱类型的可以直接进行)。对数组进行赋值赋值10个城市然后利用for循环我这里是利用的采用数组下标的方式来访问数组元素。最终可以得到输出。

10.对习题4.14进行设计,然后调试、执行。编写一个shell脚本求出斐波那契数列的前10项的总和

#!/bin/bash
sum=0
declare -a feibo
feibo=(0 0 0 0 0 0 0 0 0 0)
feibo[0]=1
feibo[1]=1
for i in {2..9}
do
feibo[$i]=$((feibo[$i-1]+feibo[$i-2]))
done
for j in {0..9}
do
sum=$(($sum+${feibo[$j]}))
echo ${feibo[$j]}
done
echo "sum=$sum"

燕山大学Linux实验shell程序设计

这个是个很常规的问题,首先定义一个sum和还有10个数据的数组首先全部设置为0,然后将第一第二项设置为1并利用一个for循环对数组元素进行赋值。最终进行输出即可。关于斐波那契数列的问题有很多种解法可以见我之前的一篇文章斐波那契数列两种算法实现(循环,递归)_斐波那契数列循环算法_用编程写诗的博客-CSDN博客

拓展实验

1. Shell编程实现指定输入的加法,比如输入100,计算1+2+3+…+100的和。

#!/bin/bash
#1+2+3+4+.....n等于多少?
echo  -n  "input: "    
read  n
sum=0
i=1
while [ $i -le  $n ]
do
 sum=$(($sum+$i))
 i=$(($i+1))
done
echo the value is:$sum

燕山大学Linux实验shell程序设计

 首先设置一个提示输出提示用户输入数据,然后只要i的值不小于n的值就进行sum相加并且i也相应的进行加1最终可以得到结果。

2.Shell编程判断指定文件夹下文件的数量。

#!/bin/bash
cd $1
filenum=0
for i in $( ls )
do
if [ -f $i ]
then filenum=$(($filenum+1))
fi
done
echo "The num of files is $filenum"

燕山大学Linux实验shell程序设计

首先传入要进入文件夹然后cd $1即可进入。最开始设置文件数量为0然后利用ls命令让i从目录中的第一个文件到最后一个文件然后进行if判断只要是文件就让filenum进行加1最终输出即可。

3.Shell编程判断给定年份是否为闰年。

#!/bin/bash
echo "请输入年份"
read year
if [ $(($year%4)) -eq 0 -a $(($year%100)) -ne 0 -o $(($year%400)) -eq 0 ]
then
    echo "$year是闰年!"
else
    echo "$year不是闰年!"
fi

燕山大学Linux实验shell程序设计

这个核心就是一个判断语句,进行输入一个年份然后进行判断,只要它是4的倍数并且不是100的倍数或者是400的倍数即可判断是闰年,这里-a相当于&&-o相当于||。

4. Shell编程实现9×9乘法表。

#!/bin/bash
for i in {1..9}
do
    for  j in {1..9}
    do
       if [ $j -le $i ];then
       echo -n  "$j"
       echo -n x
       echo -n "$i=$[i*j]  "
       fi
    done
echo
done

燕山大学Linux实验shell程序设计

这个程序也是很简单的也就是简单的循环嵌套而已,利用两个循环一个表示行数即被乘数一个表示乘数从1到行数这样相乘即可。我在这里多了一个echo -n x是因为我想让输出是1x1=1这样而不是1*1=1这样但是x咋shell程序设计里面是比较特殊的我不能把这三句话写成一句话只能拆开。如可以写成一句话欢迎指正。 

5.Shell编程实现批量修改文件扩展名,比如将.txt文件修改为.doc文件。

#!/bin/bash
cd $1
for i in `ls *.$2`
do
     mv $i ${i%.*}.$3
done

燕山大学Linux实验shell程序设计

 这就是单纯一个mv命令即可。先cd进入需要的文件夹,利用传入的参数第二个表示源文件扩展名,第三个表示修改为的文件扩展名。直接利用ls命令找到所有的第二个位置参数的文件扩展名然后转为第三个位置参数的文件扩展名。(%表示从右向左匹配删除位于%右侧通配符匹配的字符串,即i%.*就会将.也就是扩展名和.一起删除例如1.txt就会只剩下1)文章来源地址https://www.toymoban.com/news/detail-406151.html

到了这里,关于燕山大学Linux实验shell程序设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 燕山大学——软件用户界面设计(五)UI架构

                 界面设计中的“设计”与“实现”,本节的UI架构属于“实现”部分。 (1)视图树( View tree ) ①定义:GUI结构是一个视图树。视图是一个对象,显示在屏幕的某个区域,可以是一个控件或者其他元素。 ②视图树的使用:         输出:GUI通过改变视图树

    2024年02月05日
    浏览(49)
  • 燕山大学数据结构与算法课程实践——ISBN号识别系统的设计与开发

            ISBN 号是国际标准书号的简称,它是国际标准化组织于 1972 年公布的一项国际通用的出版物统一编号方法。所有正规出版的普通图书版权页都有 ISBN 号, ISBN 是 international standard of book number 几个英文字母的缩写,即国际标准书号。这个号码印刷在每本图书封底( 或

    2024年03月15日
    浏览(66)
  • 南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

    1.掌握循环程序的编写以及结束循环的方法。 2.掌握DOS、BIOS功能调用的使用方法。 用户登录验证程序的实现 程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时

    2023年04月18日
    浏览(52)
  • 同济大学Python程序设计基础 实验九:数据可视化

    1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。 2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,

    2024年02月16日
    浏览(46)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(58)
  • 郑州轻工业大学-程序设计技术(Java)-PTA实验1(7-5)-打印杨辉三角

    本段代码知识点在于对 for循环的应用 以及 二维数组的使用 ,同时将 if/else语句 嵌套在for循环中,并且在输出阶段对 格式 进行了规范,以下是详解: 1. for循环 在Java语言中,有三种循环语句,分别是for语句,while语句以及do-while语句,其中for语句的使用在代码编写的过程中最

    2024年04月08日
    浏览(47)
  • 合肥工业大学宣城校区Java技术实验二 基于GUI的网络通信程序设计

    1.掌握Java中GUI程序的编写,包括事件监听机制。 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。 3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 编写程序完成以下功能: 1.设计一个基于GUI的客户-服务器的

    2023年04月24日
    浏览(44)
  • 成都理工大学_Python程序设计_Python程序设计期末模拟试题

    ‌下列变量名中,哪一项不符合正确的变量命名规则?( ) 2_year ‍Python不支持的数据类型有( )。 char ​从键盘输入一个整数赋值给number,下面哪一句是正确的?( ) number = int(input(‘请输入一个整数:’)) 令list = [1, 2, 3],则分别执行命令del list[1]和list.remove(1)后的list为(

    2024年02月08日
    浏览(47)
  • C程序设计-方法与实践(清华大学出版社)习题解析

    本习题解析只是作为一种参考,代码不唯一! 补充:书本重要例题点击跳转 补充: 江西财经大学研究生2016-2022年真题解析及归纳总结 补充:感谢大家一路以来对本文的支持!由于作者本人现在已经考完研了,准备找工作了,开始回去学习我的主修课程JAVA了,由于时间问题

    2024年02月11日
    浏览(53)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

    开始课程:P11 1_1. this指针 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT C++是没有自身编译器的,需要使用C语言的编译器,所以C++在编译时需要把语言转换为对应的C语言。 实例1: C++程序到C程序的翻译:(下图好理解,

    2024年02月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包