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.hqwc.cn/news/697991.html

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

相关文章

学术共振 美妙发声 | 2024美沃斯大会完美收官,米兰柏羽倾力承办

5月10日-5月12日&#xff0c;为期3天的第十七届美沃斯医疗美容大会在杭州国际博览中心盛大举办&#xff0c;作为行业顶级学术交流平台&#xff0c;本届美沃斯大会不仅是医美行业的一次学术交流盛会&#xff0c;更是一次深度探讨行业未来的远眺之窗。 5月9日&#xff0c;即美沃…

Docker 安装 MySQL(Mac电脑M芯片)

Docker 安装 MySQL&#xff08;Mac电脑M芯片&#xff09; 1. 下载MySQL镜像文件2. 创建容器实例2.1 命令参数介绍 3. 容器实例内连接MySQL3.1 进入容器实例后台3.2 连接MySQL 4. DBeaver连接MySQL4.1 连接异常 1. 下载MySQL镜像文件 # 默认下载laster版本 docker pull mysql# …

MPEG-4 AVC/H.264高清编码器 JR3211P

概述 JR3211P MPEG-4 AVC/H.264高清编码器是一款专业的高清音/视频编码产品。该产品支持几乎所有模拟及数字音/视频输入接口&#xff0c;包括CVBS、YPbPr、S-video、SD/HD-SDI、HDMI视频输入接口、平衡模拟音频&#xff08;XLR&#xff09;、非平衡模拟音频&#xff08;RCA&am…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台&#xff1a;是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核&#xff0c;具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

LabVIEW开发RS422通信

LabVIEW开发RS422通信 项目围绕LabVIEW软件开发的程序在RS422通信技术检测方面的应用进行展开&#xff0c;通过软件编程将上位计算机虚拟化为检测设备&#xff0c;控制其通信端口与被测产品进行RS422通信&#xff0c;以此检验产品的性能优劣。该虚拟检测仪器在实际测试中表现出…

Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

Go框架三件套:Gorm的基本操作

1.概述 这里的Go框架三件套是指 Web、RPC、ORM框架&#xff0c;具体如下: Gorm框架 gorm框架是一个已经迭代了10年的功能强大的ORM框架&#xff0c;在字节内部被广泛使用并且拥有非常丰富的开源扩展。 Kitex框架 Kitex是字节内部的Golang微服务RPC框架&#xff0c;具有高性能…

Shell编程之循环语句

目录 一、for循环 for循环实操 二、while循环 while循环实操 三、until循环命令 until循环实操 一、for循环 读取不同的变量值&#xff0c;用来逐个执行同一组命 for 变量 in 取值列表 do 命令序列 done [rootlocalhost ~]# for i in 1 2 3 4 5 > do > echo "…

Android PreferenceActivity可以自动设置的Activity

1、介绍 PreferenceActivity 是一个抽象类&#xff0c;继承自ListActivity ,该类封装了SharedPreferences. PreferenceActivity 提供了一些常用的设置项如,与普通组件一样&#xff0c;这些配置项既可以从XML文件创建&#xff0c;也可以从代码创建. 每一个设置项标签有一个andro…

FRP多级内网穿透实验(虚拟机多级网络环境搭建+FRP工具使用)

0x00 实验背景 最近在工作中遇到了一个指定必须使用FRP作为内网穿透工具的活动&#xff0c;由于以前没有深入分析过多层内网的实验环境&#xff0c;对多级级联转发还不是很熟悉&#xff0c;在这里简单记录一下环境搭建与实验内容。 0x01 环境搭建 环境搭建以VM为为虚拟平台&…

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版 Office LTSC 2024 for Mac 请访问原文链接&#xff1a;Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

Spring Boot | Spring Boot 整合“ 邮件任务“ 实现

目录: Spring Boot 整合" 邮件任务" 实现 :一、发送 "纯文本邮件" :(1) 添加 "邮件服务" 依赖启动器(2) 添加 "邮件服务" 配置信息(3) 定制 "邮件发送服务"(4) "纯文本" 邮件发送 测试效果 二、发送 带 "附件…