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;在主页中根据自己的…

基于OpenCV年龄与性别识别系统

深入解析基于OpenCV年龄与性别识别系统 在这篇博客中&#xff0c;我们将详细解析一个使用OpenCV进行年龄和性别识别的Python脚本。这个脚本展示了如何利用深度学习模型&#xff0c;从视频或图像中检测人脸并预测每个人脸的年龄和性别。 1. 导入必要的模块 import cv2 as cv …

ELK的详解

ELK是由Elasticsearch、Logstash和Kibana三个开源软件&#xff08;后来又新加了一个FileBeat&#xff09;组成的日志管理解决方案&#xff0c;这一组合在近年来得到了广泛的关注和应用。以下是对这三个组件的详细说明&#xff1a; Elasticsearch&#xff1a; Elasticsearch是…

nginx 负载均衡配置详解

基于 ${nginx_home}/conf/nginx.conf 文件配置实现&#xff0c;如下&#xff1a; http {# 定义server地址upstream server_group {server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;server 192.168.xxx.3:8080;}server {listen 80;location / {root html;index …

python数据分析——时间序列

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

持续总结中!2024年面试必问 100 道 Java基础面试题(四十五)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 100 道 Java基础面试题&#xff08;四十四&#xff09;-CSDN博客 八十九、在Java中&#xff0c;什么是线程局部变量&#xff08;ThreadLocal变量&#xff09;&#xff1f; 在Java中&#xff0c;ThreadLocal变量是…

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

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

Flutter 中的 CircleAvatar 小部件:全面指南

Flutter 中的 CircleAvatar 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CircleAvatar 是一个用于显示头像的圆形控件&#xff0c;通常包含一个图标、图片或者一个简单的文本字符。它在设计上与 Material Design 指南中的头像规范相匹配&#xff0c;常用于展示用户信…

C# 常用汇总

时间处理 public static class DateTimeHelper{/// <summary>/// 获取当前时间戳&#xff08;Unix时间戳&#xff09; /// </summary>/// <returns></returns>public static long GetCurrentUnixTimestamp(){DateTimeOffset offset DateTimeOffset.…

Qt---文件系统

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

Java网络编程基础

Java网络编程基础主要涉及进程间通信、网络通信协议、IP地址和端口以及Java提供的网络应用编程接口等核心概念。 进程间通信是Java网络编程的基础。进程是运行中的程序&#xff0c;而进程间通信则是指不同进程之间进行数据交换和共享信息的过程。在Java中&#xff0c;进程间的…

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;三连支持一…

ddpm Denoising Diffusion Probabilistic Model 学习笔记

目录 Stable Diffusion 文章的贡献抽象出来就两个 潜空间上做扩散生成 ddpm(Denoising Diffusion Probabilistic Model)学习笔记 算法原理 unet预测噪声 unet推理过程 重参数化技巧 &#xff08;1&#xff09;利用前一时刻的 xt-1 得到任意时刻的噪声图片 xt&#xff…

LeetCode2215找出两数组的不同

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

Linux poweroff命令教程:如何实现一键关机(附实例详解和注意事项)

Linux poweroff命令介绍 poweroff命令是用来关闭系统的。当你执行这个命令时&#xff0c;它会发送一个信号给系统&#xff0c;告诉系统关闭所有的进程&#xff0c;然后关闭系统。这个命令非常有用&#xff0c;特别是在你需要远程关闭系统&#xff0c;或者你的系统没有图形用户…

Autosar架构

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

项目部署到线上proxytable代理失效nginx报404的问题

我的项目是在vue的config文件夹中的index.js中配置了接口地址 &#xff0c;本地跑的时候都能访问&#xff0c;放到线上就报404&#xff1b; module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: {/xxx: {target: http://xxxxxxxx:xxx…