Linux操作系统实验五 shell编程基础(三)

简介: Linux操作系统实验五 shell编程基础(三)

 【实例3】在指定时间内输入密码。

  1. #!/bin/bash
  2. if
  3.    read -t 20 -sp "Enter password in 20 seconds(once) > " pass1 && printf "\n" &&  #第一次输入密码
  4.    read -t 20 -sp "Enter password in 20 seconds(again)> " pass2 && printf "\n" &&  #第二次输入密码
  5.    [ $pass1 == $pass2 ]  #判断两次输入的密码是否相等
  6. then
  7.    echo "Valid password"
  8. else
  9.    echo "Invalid password"
  10. fi

    这段代码中,我们使用**&&**组合了多个命令,相当于其他语言中的 and ,这些命令会依次执行,并且从整体上作为 if 语句的判断条件。只要其中一个命令执行失败(退出状态为非 0 值),整个判断条件就失败了,后续的命令也就没有必要执行了。

  1. 如果两次输入密码相同,运行结果为:
  2. Enter password in 20 seconds(once) >
  3. Enter password in 20 seconds(again)>
  4. Valid password

  5. 如果两次输入密码不同,运行结果为:
  6. Enter password in 20 seconds(once) >
  7. Enter password in 20 seconds(again)>
  8. Invalid password

  9. 如果第一次输入超时,运行结果为:
  10. Enter password in 20 seconds(once) > Invalid password

  11. 如果第二次输入超时,运行结果为:
  12. Enter password in 20 seconds(once) >
  13. Enter password in 20 seconds(again)> Invalid password

    关于 echo 和 read 的使用方式还有很多,大家可以通过 help echo 和 help read 的方式去获取更多的帮助文档。

任务描述

本关继续带领大家了解掌握 shell 的内置命令,接下来将会学习内置命令exitdeclare

相关知识

内置命令 —— exit

exit 是一个 Shell 内置命令,用来退出当前 Shell 进程,并返回一个退出状态;使用**$?**可以接收这个退出状态,$?如果不记得是什么,请查看前一章节的shell变量。exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。

    一般情况下,退出状态为 0 表示成功,退出状态为非 0 表示执行失败(出错)了, exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

    Shell 进程执行出错时,可以根据退出状态来判断具体出现了什么错误,比如打开一个文件时,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。     【实列1】运行该脚本:

  1. #!/bin/bash
  2. echo "befor exit"
  3. exit 8
  4. echo "after exit
  5. [root@localhost ~]$ bash ./test.sh
  6. befor exit

    可以看到,"after exit"并没有输出,这说明遇到 exit 命令后,test.sh 执行就结束了。     注意:exit 表示退出当前 Shell 进程,我们必须在新进程中运行 test.sh,否则当前 Shell 会话(终端窗口)会被关闭,我们就无法看到输出结果了。     我们可以紧接着使用$?来获取 test.sh 的退出状态:

  1.    [root@localhost ~]$ echo $?
  2.    8
内置命令 —— declare

declare一般很少用到,但大家要知道下列常用的方法。

【实列2】declare 将变量声明为整数并进行计算。

  1. #!/bin/bash
  2. declare -i m n ret  #将多个变量声明为整数
  3. m=10
  4. n=30
  5. ret=$m+$n
  6. echo $ret

    如果我们不使用 declare,结果如下所示:

  1. [root@pre-host-work02 ~]# a=10
  2. [root@pre-host-work02 ~]# b=20
  3. [root@pre-host-work02 ~]# c=$a+$b
  4. [root@pre-host-work02 ~]# echo $c
  5. 10+20

    因此注意在 shell 如果要求整数值的话,不要忘了有 declare 这样的内置命令来定义变量。关于 declare 的其他使用方式,大家可以自行去了解。

编程要求

补全右侧编辑器 Begin-End 区间的代码,完成指定功能,具体要求如下:

1.现有变量 a、b、c ,已知 a 为整数 100,b 为整数 300,c=$a+$b,打印 c 的值,应该为 400; 2.补全[ $? -eq ]内的值,-eq 的意思是‘等于’,注意 [ ] 两边要留一个空格,通过 $? 判断上面的命令是否运行成功,如果运行成功则输出success ,否则输出 faild

注意:请不要直接输出 400 或者直接输出 success,因为评测程序会判断你的代码文件。

任务描述

本关任务:掌握函数的创建和使用方法。

相关知识

函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用。要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数)。本关将会介绍如何在 shell 脚本中创建和使用函数。

创建函数

有两种格式可以用来在 bash shell 脚本中创建函数。

  • 第一种格式采用关键字 function,后跟分配给该代码块的函数名。
  1. function name {
  2. commands
  3. }

参数说明:

  1. name 属性定义了赋予函数的唯一名称。脚本中定义的每个函数都必须有一个唯一的名称。
  2. commands 是构成函数的一条或多条 bash shell 命令。在调用该函数时,bash shell 会按命令在函数中出现的顺序依次执行,就像在普通脚本中一样。
  • 定义函数的第二种格式更接近于其他编程语言中定义函数的方式。
  • i. name() {
  • ii. commands
  • iii. }

函数名后的空括号表明正在定义的是一个函数。这种格式的命名规则和之前定义 shell 脚本函数的格式一样。

使用函数

【实例1】要在脚本中使用函数,只需要像其他 shell 命令一样,在行中指定函数名就行了。 已知 cat test.sh 显示内容如下:

  1. #!/bin/bash
  2. # using a function in a script
  3. function func1 {
  4. echo "This is an example of a function"
  5. }
  6. count=1
  7. while [ $count -le 5 ]
  8. do
  9. func1
  10. count=$[ $count + 1 ]
  11. done
  12. echo "This is the end of the loop"
  13. func1                             # 指定函数名即可调用函数
  14. echo "Now this is the end of the script"

执行输出结果如下:

  1. This is an example of a function
  2. This is an example of a function
  3. This is an example of a function
  4. This is an example of a function
  5. This is an example of a function
  6. This is the end of the loop
  7. This is an example of a function
  8. Now this is the end of the script

每次引用函数名 func1 时,bash shell 会找到 func1 函数的定义并执行你在那里定义的命令。 【实例2】函数的调用要在函数定义之后使用,否则会报错。

  1. #!/bin/bash

  2. echo "hello function"
  3. fun1
  4. fun1(){
  5. echo "i am func1"
  6. }

执行结果如下:

  1. # bash a.sh
  2. hello function
  3. a.sh: line 6: fun1: command not found

【实例3】函数名必须是唯一的,否则也会有问题。如果你重定义了函数,新定义会覆盖原来函数的定义,这一切不会产生任何错误消息。

  1. #!/bin/bash

  2. fun1(){
  3. echo "i am func1"
  4. }

  5. fun1(){
  6. echo "i am new func1"
  7. }

  8. fun1

执行结果如下:

  1. i am new func1

编程要求

在右侧编辑器 Begin-End 区间补充代码,调用 welcome 函数输出指定内容。

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
10天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
27 0
Vanilla OS:下一代安全 Linux 发行版
|
13天前
|
人工智能 安全 Linux
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
61 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
17天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
1月前
|
Linux iOS开发 MacOS
MacOS环境-手写操作系统-35-Shell控制台
MacOS环境-手写操作系统-35-Shell控制台
19 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
23 0
|
4月前
|
安全 Linux 网络安全
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
|
4月前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
108 3