Linux实验 Shell编程

  • 实验目的:
  1. 熟练掌握Shell程序的建立与执行;
  2. 掌握Shell变量的两种类型(Shell环境变量和用户自定义变量)及其用法;
  3. 掌握Shell中的特殊字符、算术与逻辑运算;
  4. 掌握Shell中输入输出命令;
  5. 掌握Shell程序控制结构语句。

实验内容:

在VMware中启动CentOS7虚拟机后,打开putty或者MobaXterm,远程登录root账号,完成以下任务,截图并粘贴于以下空行中。

利用vi在宿主目录中编写一个名为test8_1.sh的Shell程序,该程序查看当前目录和日期(脚本代码如下),并用给定的三种方式执行。

#!/bin/bash

echo "The current directory has the following files"

ls

echo "today is"

date

sh<程序名

sh 程序名

用chmod a+x 程序名,使该程序成为可执行文件,然后进入该程序文件所在目录,执行./程序名

说明:在这三种运行Shell程序的方法中,最好按下面的方式选择:当刚创建一个Shell程序,对它的正确性还没有把握时,最好使用第一或第二种方式进行调试。当一个Shell程序已经调试好时,应使用第三种方式把它固定下来,以后只要键入相应的文件名即可,并可被另一个程序所调用。另外,注意这三种运行方法都是创建一个新的Shell子进程来执行脚本内容。

利用vi在宿主目录中编写一个名为test8_2.sh的Shell程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。任选一种方法执行该程序。

#!/bin/bash

echo "Please input the month : "

read month

echo "Please input the year : "

read year

cal      

Shell编程中,单引号和双引号是有区别的:单引号里所有字符或字符串都视为一般字符,而双引号仍然可以保留$、倒引号、反斜线\等特殊功能。比较以下两个命令的结果。

#!/bin/bash

echo "Please input your name?"

read name

echo "Hello, $name ! The number of users in the system is `who |wc -l`."

echo 'Hello, $name ! The number of users in the system is `who |wc -l`.'

利用vi在宿主目录中编写一个名为test8_4.sh的Shell程序,该程序根据用户输入的分数判断成绩是否通过考试。

#法1:使用if语句

#!/bin/bash

echo  $score  "please input a score:\c"

read score

echo "Your score is $score"

if       [ $score -ge 60 ]; then       #变量score的值大于等于60

then echo "Congratulation! You Pass the Examination."

else echo "Sorry! You Fail the Examination!"

 if 

#法2:使用case语句。注意理解由通配符和“|”隔开的多个模式组成的表达式。

#!/bin/bash

echo  $score  "please input a score:\c"

read score

echo "Your score is $score"

case  $scorr   in 

 [0-9]|[1-5][0-9]) echo "Sorry! You Fail the Examination!" ;;  #0-9或者10-59

 [6-9][0-9]|100) echo "Congratulation! You Pass the Examination." ;;  #60-99或者100

 esac 

利用vi在宿主目录中编写一个名为test8_5.sh的Shell程序,该程序模拟一个多任务维护界面,当执行程序先显示菜单,然后进行选择后做相应的维护监控操作。显示菜单使用自定义函数实现。

#!/bin/bash

display()

{

echo " ----- Command Help Menu -----"

echo " h Show command help menu. "

echo " f Show all available block devices. "

echo " d Show the remaining disk space. "

echo " m Show the memory usage. "

echo " u Show how long the system is running. "

echo " q exit the program. "

}

display

while true

do

echo "Please select what you want to do (help h)"

read action

case  $action   in 

h) display;;   

f) lsblk;;

d) df -h;;

m) free -m;;

u) uptime;;

q) exit;;

  esac  

  done  

已知变量a=3,b=2,完成以下算术运算,并截图。

expr方法。注意运算符前后都有空格。

代码:expr $a - $b,用于计算a与b的差。仿此计算:

a与b的乘积。

a除以b的商。

a除以b的余数。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

product=$(expr $a \* $b)

echo "乘积: $product"

# 计算 a 除以 b 的商

quotient=$(expr $a / $b)

echo ": $quotient"

# 计算 a 除以 b 的余数

remainder=$(expr $a % $b)

echo "余数: $remainder"

let方法。运算符前后不需要有空格,需要结合echo命令输出结果。

代码:let c=$a-$b; echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

let c=$a*$b

echo "乘积: $c"

# 计算 a 的 b 次方

let d=$a**$b

echo "幂: $d"

$((表达式))方法。运算符前后不需要有空格,且表达式中的变量前面不需要加上$符号,需要结合echo命令输出结果。

运行代码:c=$((a-b)); echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

c=$((a*b))

echo "乘积: $c"

# 计算 a 的 b 次方

d=$((a**b))

echo "幂: $d"

$[表达式]方法。与$((表达式))方法类似。

运行代码::c=$[a-b]; echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

c=$((a*b))

echo "Product: $c"

# 计算 a 的 b 次方

d=$((a**b))

echo "Power: $d"

利用vi在宿主目录中编写一个名为test8_7.sh的Shell程序,该程序实现计算用户输入命令后的若干个数字参数的和。例如运行sh test8_7.sh 1 2 3,结果是1、2、3的和6。

#法一:用for循环

#!/bin/bash

sum=0

for i #这里for i 完整的写法应该是       

do

let           

done

echo sum=    

#法二:用while循环和shift命令(注意理解shift命令的用法。供参考)

#!/bin/bash

sum=0

while [ $# -ne 0 ] #这里的$#表示命令后所有参数$1、$2…的总个数

do

let sum=$sum+$1 #想想这里为什么是$1

shift

done

echo sum=$sum

利用vi在宿主目录中编写一个名为test8_8.sh的Shell程序,该程序把当前目录下的所有*.sh文件到指定的目录(如home目录下某个普通用户的家目录下)中,并显示复制后该目录内按文件大小排序的目录文件清单。

echo "Please enter the destination directory name that you want to copy:"

read dir

if           #文件测试。若变量dir代表的文件存在且是目录文件

then

for filename in       #所有*.sh文件,使用通配符

do

cp $filename      #将所有*.sh文件复制到目标目录

done

ls -l $dir | sort -n -r -k 5 #-n数值排序,-r逆序,-k 5按第5个字段。教材P83

else

echo "$dir is a bad directory name."

fi

思考:

Shell变量两种类型,即Shell环境变量和____局部变量_________。Shell环境变量又分成可写和只读两大类。

在使用用户自定义变量时,要在变量名前面加上符号__$___。

Shell标准输入命令是__<stdin>_____,输出命令是___<stdout>_____。

Shell顺序结构中的操作符有4种:顺序分隔符(;)、__逻辑否(!)_______、逻辑与(&&)和逻辑或(||)。

通过使用Linux/Unix中文件重定向命令,可以将命令的输入、输出以及错误消息重定向到其他文件中,重定向方式有以下几种:输入重定向命令、输出重定向命令、输出附加定向命令和标准错误重定向命令,它们使用的符号分别是什么?

输入重定向命令:<

输出重定向命令:>

输出附加定向命令:>>

标准错误重定向命令:2>

Shell选择分支结构主要有2类:if语句和____case___语句。

Shell循环结构有3类语句:for语句、__while____语句和until语句。

Shell循环结构中的循环体需要放在___do__和___done___两个关键字之间。

Shell脚本中,退出脚本程序命令是____exit____。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Windows环境下安装CPU版的PyTorch

PytTorch是基于Python开发的&#xff0c;首先需要安装Python&#xff0c;Python的安装很简单&#xff0c;这里不再赘述。而 Windows用户能直接通过conda、pip和源码编译三种方式来安装PyTorch。 打开PyTorch官网&#xff08;PyTorch&#xff09;&#xff0c;在主页中根据自己的…

python数据分析——时间序列

时间序列 前言一、Datetime 模块常用函数和数据结构的详细解释datetime模块示例一示例二 二、时间运算示例一示例二示例三 三、时间序列分析自回归(Autoregressive model/AR)模型示例 滑动平均(moving average model/MA)模型示例 自回归滑动平均(Autoregressive moving average…

企业微信hook接口协议,ipad协议http,发送链接的方式邀请成员进群

发送链接的方式邀请成员进群 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955013729, "vids":[788130334…

Qt---文件系统

一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读&#xff1a; file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll()&#xff0c;按行读->file.readLine()&#xff0c;atend()->判断是否读到文件尾 …

STM32存储左右互搏 USB接口FATS文件读写U盘

STM32存储左右互搏 USB接口FATS文件读写U盘 STM32的USB接口可以例化为Host主机从而对U盘进行操作。SD卡/MicroSD/TF卡也可以通过读卡器转换成U盘使用。这里介绍STM32CUBEIDE开发平台HAL库实现U盘FATS文件访问的例程。 USB接口介绍 常见的USB接口电路部分相似而有不同的连接器…

K8S -----二进制搭建 Kubernetes v1.20

目录 一、准备环境 1.1 修改主机名 1.2 关闭防火墙&#xff08;三台一起&#xff0c;这里只展示master01&#xff09; 1.3 在master添加hosts&#xff08;依旧是三台一起&#xff09; 1.4 调整内核参数并开启网桥模式 二、部署docker引擎 三、部署 etcd 集群 1.在mast…

15.JUC原子类

文章目录 JUC原子类1.JUC中的Atomic原子操作包1.1. 基本原子类&#xff08;Basic Atomic Classes&#xff09;1.2. 数组原子类&#xff08;Array Atomic Classes&#xff09;1.3. 引用原子类&#xff08;Reference Atomic Classes&#xff09;4. 字段更新原子类&#xff08;Fie…

StackQueue+泛型简单理解

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…

LeetCode2215找出两数组的不同

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;请你返回一个长度为 2 的列表 answer &#xff0c;其中&#xff1a;answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…

Autosar架构

蓝框那种叫component&#xff0c;绿框的叫function cluster。 接口 有三种接口&#xff0c;RTE跟SWC之间链接的叫Autosar Interface&#xff0c;RTE跟BSW的Components链接是Standardized Interface&#xff0c;RTE跟BSW的services链接的是Standardized Autosar Interface。 St…

网络协议的分类

1.概要 网络协议可以分为三类&#xff1a; 封装协议路由协议功能类协议 2.分类说明 OSPF报文直接调用_ IP协议__协议进行封装&#xff0c;以目的地址_244.0.0.5 __发送到所有的OSPF路由器? 244.0.0.1 所有主机&#xff1b;244.0.0.2 所有路由器&#xff1b;244.0.0.6 指定…

Vue+springboot的批量删除功能

vue前台 <div style"margin-bottom: 10px"><el-button type"primary" plain click"handleAdd">新增</el-button><el-button click"delBatch" type"danger" plain style"margin-left: 5px"…

C语言例题41、八进制转换为十进制

#include<stdio.h>void main() {int x;printf("请输入一个8进制整数&#xff1a;");scanf("%o", &x);printf("转换成十进制后的整数为%d\n", x); }运行结果&#xff1a; 本章C语言经典例题合集&#xff1a;http://t.csdnimg.cn/FK0Qg…

Java入门基础学习笔记21——Scanner

在程序中接收用户通过键盘输入的数据&#xff1a; 需求&#xff1a; 请在程序中&#xff0c;提示用户通过键盘输入自己的姓名、年龄、并能在程序中收到这些信息&#xff0c;怎么解决&#xff1f; Java已经写好了实现程序&#xff0c;我们调用即可。 API&#xff1a;Applicat…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序设计竞赛 problem K. 树上问题

//先找一个美丽的树&#xff0c;然后遍历树找节点,分析是否符合条件。 //画几个图&#xff0c;思考下。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],d,l,r,k,w,an; vector<int>t[n]; void dfs(int x,int…

什么是页分裂、页合并?

数据组织方式 在InnoDB存储引擎中&#xff0c;表数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表(index organized table IOT)。 行数据&#xff0c;都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图&#xff1a; 在I…

61、内蒙古工业大学、内蒙科学技术研究院:CBAM-CNN用于SSVEP - BCI的分类方法[脑机二区还是好发的]

前言&#xff1a; 之前写过一篇对CBAM模型改进的博客&#xff0c;在CBAM中引入了ECANet结构&#xff0c;对CBAM中的CAM、SAM模块逐一改进&#xff0c;并提出ECA-CBAM单链双链结构&#xff0c;我的这个小的想法已经被一些同学实现了&#xff0c;并进行了有效的验证&#xff0c;…

快速对比 找出2个名单不同之处

import pandas as pd# 读取两个Excel文件 df1 pd.read_excel(1.xlsx) df2 pd.read_excel(2.xlsx)# 检查两个DataFrame的列是否相同 if list(df1.columns) ! list(df2.columns):print("两个Excel文件的列不一致。")print("文件1的列&#xff1a;", df1.co…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好&#xff0c;我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY&#xff0c;为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话&#xff0c;欢迎分享转发&#xff01; 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可&#xff0c;新用户可免费…

【线程创建】——三种方式➕多线程案例练习

02 线程创建 Thread , Runnable , Callable 三种创建方式 Thread class - 继承Thread类 (重点) Runnable接口 - 实现Runnable接口 (重点) Callable接口 - 实现Callable接口 (了解) Thread 类实现 它继承了老祖宗 Object java.lang.Object java.lang.Thread 它实现了 Runnab…