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的迁移。
目录
相关文章
|
2月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
82 0
Vanilla OS:下一代安全 Linux 发行版
|
10天前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
75 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
2天前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
27 7
|
3天前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
23 5
|
4天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
5天前
|
人工智能 弹性计算 运维
云端问道7期方案教学-使用操作系统智能助手OS Copilot轻松运维与编程
本文介绍了阿里云基础软件团队推出的操作系统智能助手 OS Copilot,旨在解决 Linux 开发与运维中的痛点。OS Copilot 基于大模型和操作系统领域知识构建,支持自然语言问答、命令辅助执行、系统运维优化及代码生成等功能,极大降低了学习成本和工作量。文章详细阐述了其产品架构、典型应用场景以及实验反馈渠道,帮助用户更高效地进行系统管理和编程。目前该产品处于公测阶段,免费提供给阿里云 ECS 实例和 Alinux 3 系统用户使用。
|
17天前
|
存储 弹性计算 运维
云端问道 7 期实践教学-使用操作系统智能助手 OS Copilot 轻松运维与编程
使用操作系统智能助手 OS Copilot 轻松运维与编程
43 14
|
1月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
73 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
4天前
|
弹性计算 人工智能 运维
新手训练营——使用操作系统智能助手OS Copilot轻松运维与编程
本文摘自阿里云操作系统团队的林演(林生)关于操作系统智能助手创新产品的分享,围绕“OS Copilot的高效运维与编程”展开,主要包括以下几方面的内容: 1. 行业痛点击及背景 2. 产品与架构 3. 典型应用场景 4. 实验及反馈渠道
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
55 0
Linux 如何更改默认 Shell