实验6:shell编程

article/2025/10/8 6:29:47
  1. 实验目的
    (1)掌握shell编程的变量、程序控制结构、条件测试等语法。
    (2)了解shell 脚本的运行方式
    (3)理解shell脚本中的函数
    (4)掌握简单shell脚本编写方法
  2. 实验环境
    (1)一台已经安装好的Window系统的计算机。
    (2)安装好的CentOS虚拟机。
  3. 实验内容
    编写简单shell脚本
  4. 实验步骤
    (1) 认识shell脚本语言
    业界所说的 shell 通常都是指 shell 脚本,但要知道,shell和shell script 是两个不同的概念。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。而Shell 脚本(shell script),是一种为 shell 编写的脚本程序。作为一种命令级语言,Shell 是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell 脚本中直接使用系统命令。同传统的编程语言一样,Shell 提供了很多特性,这些特性可以使 Shell 脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。
    (2) shell变量、输入、输出
    定义变量时,变量名不加美元符号,变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:
    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线_。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。
    使用一个定义过的变量,只要在变量名前面加美元符号即可。
    运行shell时,会同时存在三种变量:
  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
    Linux read命令用于从标准输入读取数值。
    read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。参数说明如下:
    -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
    -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
    -p 后面跟提示信息,即在输入前打印提示信息。
    -e 在输入的时候可以使用命令补全功能。
    -n 后跟一个数字,定义输入文本的长度,很实用。
    -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
    -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
    -t 后面跟秒数,定义输入字符的等待时间。
    -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
    Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。
    1.显示普通字符串:
    echo “It is a test”
    这里的双引号完全可以省略,以下命令与上面实例效果一致:
    echo It is a test
    2.显示转义字符
    echo ““It is a test””
    结果将是:
    “It is a test”
    3.显示换行
    echo -e “OK! \n” # -e 开启转义
    echo “It is a test”
    输出结果:
    OK!
    It is a test
    4.显示不换行
    #!/bin/sh
    echo -e “OK! \c” # -e 开启转义 \c 不换行
    echo “It is a test”
    输出结果:
    OK! It is a test
    5.显示结果定向至文件
    echo “It is a test” > myfile
    6.原样输出字符串,不进行转义或取变量(用单引号)
    echo ‘$name"’
    输出结果:
    $name"
    7.显示命令执行结果
    echo date
    注意: 这里使用的是反引号 `, 而不是单引号 '。
    结果将显示当前日期
    Thu Jul 24 10:08:46 CST 2014

(3) shell程序控制结构

  1. if else
    if 语句语法格式:
if condition
thencommand1 command2...commandN 
fi

末尾的 fi 就是 if 倒过来拼写,后面还会遇到类似的。
if else 语法格式:

if condition
thencommand1 command2...commandN
elsecommand
fi

if else-if else 语法格式:

if condition1
thencommand1
elif condition2 
then command2
elsecommandN
fi
  1. for循环
    for循环一般格式为:
for var in item1 item2 ... itemN
docommand1command2...commandN
done

当变量值在列表里,for 循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的 shell 命令和语句。in 列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数。

while语句
while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:

while condition
docommand
done

无限循环
无限循环语法格式:

while :
docommand
done

或者

while true
docommand
done

或者

for (( ; ; ))
  1. until循环
    until 循环执行一系列命令直至条件为 true 时停止。

until 循环与 while 循环在处理方式上刚好相反。

一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

until 语法格式:

until condition
docommand
done

(4) shell程序运行方法
1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/bash test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
3、source
source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。source 命令格式:source filenamesource 会在当前 Shell 环境下读取并执行 filename 中的命令。该 filename 文件可以无"执行权限"。
(5) 独立编写简单shell脚本,完成循环输入百分制分数,将其转换成等级,直到用户输入q结束

  1. 分别用while和until实现这个功能,对应两个函数。
    第一个函数
    在这里插入图片描述

第二个函数
在这里插入图片描述

  1. 第一个脚本调用函数实现成绩转换
    在这里插入图片描述

运行
在这里插入图片描述

  1. 第二个脚本用select实现,提供1.while 2.until *break 三个选项用来选择
    在这里插入图片描述

运行
在这里插入图片描述

(6)shell函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:

[ function ] funname [()]
{action;[return int;]
}

可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)。
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数.
5. 实验思考题
(1)脚本语言和编程语言有何区别?

  • 脚本语言不需要编译器因而省去了编译的过程减少了开发的时间,而编程语言需要编译所以时间更长点
  • 脚本语言是一种动态语言,也就是说可以实时的更改代码,而不需要将程序停止下来,这是一种高级特性。而Java等编程语言是静态的语言,一旦编译完成并且运行就不能更改代码,除非将程序停止下来
  • 脚本语言非常容易学习,但是不够全面缺乏系统性而且语法较为散漫。而高级编程语言虽然相对难学,但是规则强可以编程出简洁美观的代码,并且可读性也相对较强。
  • 一般来说脚本语言通用性较差,但是可以通过专门的应用来调整。
  • 随着技术的发展,其实脚本语言变得越来越强,和编程语言的界限也比较模糊,比如Python,可以将它视为编程语言了,因为它很强大。
    (2)如何引用变量?
    $+变量名
    (3)用./运行一个shell脚本时,要注意必须赋予脚本什么权限?
    可执行权限。chmod +x ./test.sh #使脚本具有执行权限

http://chatgpt.dhexx.cn/article/lAvVsocO.shtml

相关文章

shell编程练习题

近来学习到linux的shell编程一块,于是学完后想练习一下。本文就是基于一道练习题来记录一下自己遇到的问题以及解决的过程。 首先看题目:编写shell脚本,要求实现如下功能:当执行一个程序的时候,这个程序会让使用者选择…

Shell编程三剑客

文章目录 前言grep选项 sed 工具概述基本语法常见的 sed 命令选项常见的操作 实验结合正则表达式输出符合条件的文本删除符合条件的文本替换符合条件的文本迁移符合条件的文本 使用脚本编辑文件调用变量来改文件 awk概述工作原理:选项工作原理内置变量关于数组与字符…

Shell编程【万字Shell详细介绍带你入门建议收藏】

文章目录 1 Shell 基础介绍1.1 Shell 简介Shell 概述Shell 发展史查看Shell查看系统默认安装的 Shell查看当前登录用户默认 Shell查看当前的 Shell 1.2 Shell 脚本(定义、作用、格式、权限及执行)Shell 脚本基础知识Shell 脚本的约束Shell 脚本可以完成很多任务,但不…

Linux之Shell编程详解

精心整理Shell编程的入门,并配图加代码,方便大家跟着操作,但是难免不了存在纰漏,感谢大家的指正与理解!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!谢谢…

Linux系统的Shell编程

一. 什么是Shell 1. 在学习Shell编程之前,我们应该要先知道什么是Shell 用户、Shell、Linux内核、硬件的关系如下图: Shell是一个应用程序,也可以说是一个命令解释器,它是用户和Linux内核之间的桥梁,可以将用户在图形界…

Linux中的Shell编程

1.Shell的概念 shell是一个命令行解释器,它为客户提供了一个Linux内核发送请求一边运行程序界面系统级程序,用汉语可以通过shell启动、挂起、停止甚至编写一些程序。 shell还是一个功能强大的编程语言,易于编辑,易于调试&#xff…

Shell编程实验

实验二 Shell编程 文章目录 实验二 Shell编程一、如果当前目录下有文件f1,但是没有f2,解释命令ls f1 f2 2>ef1 1>&2的运行结果。二、使用for循环语句编写一段B-shell程序,完成显示用户注册目录下的a_sub, b_sub子目录下的所有C程序…

Shell编程入门

文章目录 1 Shell编程简介2 Shell脚本的执行方式3 Shell变量3.1 Shell变量介绍3.2 定义变量的规则3.3 将命令的返回值赋给变量(重点) 4 设置环境变量5 位置参数变量6 预定义变量7 运算符8 条件判断8.1 基本介绍8.2 if 判断8.3 case 语句 9 循环语句9.1 f…

Linux Shell编程

Linux Shell编程 一、简述 简单的介绍shell脚本的基本用法。 shell脚本是 由一些按照一定格式组合起来的shell命令 组成。shell脚本不需要编译就可以直接执行,它是边解释边执行的。 二、命令解释器 Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell&a…

Shell编程入门学习

文章目录 Shell编程Shell脚本的执行方式Shell的变量Shell的变量的介绍shell变量的定义 设置环境变量位置参数变量介绍基本语法 预定义变量基本介绍基本语法 运算符基本语法 条件判断判断语句常用判断条件 流程控制if 判断case语句for循环while循环 read读取控制台输入基本语法 …

shell编程

文章目录 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.2.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 基本介绍6.2 基本语法 七…

shell编程入门(一天掌握shell编程)

一、背景 到新公司之后,发现好多地方需要使用shell来编写一些简单的程序来提升自己的工作效率,因此专门B站上查看视频(尚硅谷的视频),在这里学习总结下shell编程。 二、shell概述 shell是一个命令行解释器&#xff…

Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

目录 一、Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二、Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变量 5. 预定义变量 三、运算符 四、条件判断 五、流程控制 1. if 语句 2. case 语句 3. fo…

各大常见OJ与推荐OJ汇总(OJ题量统计)

这么长时间了 收集了不少做题的网站 在这里列一列 可以挑自己各方面都喜欢的主用 并没有什么顺序 大家择优选择 Last-Modified: 2023/3 POJ(北京大学)洛谷CowcoderLibreOJCodeforces(俄罗斯)东北大学秦皇岛分校oj51Nodhihocoder…

华为OD机试(2023A+B)在线OJ模拟

语言支持 CCJavaJavaScript(Node.js-CJS、Node.js-ESM)Python(Python3、PyPy3、Python3-Graphics)Mono C#GoRubyRustSQLHaskellBashJuliaKotlin/JVMFortranPascalPHPVerilog 用例库说明 在线OJ中的题目用例均来自本人构思&#…

在线OJ注意事项

CSDN话题挑战赛第2期 参赛话题:学习笔记 一、OJ概念 online judge,简称OJ,是一个在线的判题系统。 用户可以在线提交多种程序代码(比如:C、C、Java、Python等),系统对源代码进行编译和执行,并通过预先设计…

在线OJ系统

在线OJ系统 项目开始之前需要准备的第三方库项目分析 两大模块在线编译模块整体思路编译模块 题目管理模块数据存储页面显示服务器 项目开始之前 需要准备的第三方库 httplib g版本必须得是4.9以上 ctemplate boost: yum install boost-devel.x86_64 jsoncpp&a…

分享一个OJ平台——浙江工商大学的OJ平台

1.引言 最近是有总喜欢讨论算法题,因为他们在准备考研复试,为什么我不准备呢?这是一个悲伤的故事,刚好自己也有面试遇到只能使用C和C的代码题,他们说这OJ平台相对简单一些,那些刷不来LeetCode可以试试这个&…

算法OJ题(1)

1.删除有序数组中的重复项 原题链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ 思路:使用双指针算法可以使时间复杂度达到O(1). 具体过程:(以画图解释) 代码实现: int remove…

你想知道刷题的秘密吗?一篇博客让你明白什么是OJ题,如何刷OJ题,并深入浅出的带你刷遍顺序表的OJ题(小白必看)

目录 0.前言 1.什么是OJ 1.1 OJ简述 1.2 OJ的分类(尤其接口型OJ,带你剖析得明明白白) 1.3 接口型OJ的输入型参数 2. 剑指 Offer 56 - I. 数组中数字出现的次数 3. 88. 合并两个有序数组 4. 27.移除元素 5. 26. 删除有序数组中的重复…