Linux Shell 基础教程⑧

Shell 教程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


在线体验网站

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:
创建一个first.sh文件

vi first.sh
输入以下内容
#!/bin/bash
echo "Hello World !"

在这里插入图片描述

按i切换模式,然后输入内容,再按esc返回,按shift+: ,输入wq保存退出。

不懂操作vi的就返回去看

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

然后我们cat查看first.sh的文件内容

在这里插入图片描述

运行 Shell 脚本有两种方法:

1、作为可执行程序

chmod +x ./first.sh  #使脚本具有执行权限
用ll 查看
./first.sh  #执行脚本

在这里插入图片描述

注意,一定要写成 ./first.sh,而不是 first.sh,运行其它二进制的程序也一样,直接写 first.sh,linux 系统会去 PATH 里寻找有没有叫 first.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./first.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

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

/bin/sh test.sh

在这里插入图片描述


Shell 变量

在 Shell 编程中,变量是用于存储数据值的名称。

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="baoge"

案例:
在这里插入图片描述
在这里插入图片描述

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

1.只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。

2.不能以数字开头: 变量名不能以数字开头,但可以包含数字。

3.避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。

4.使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。

5.避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。

6.避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

有效的 Shell 变量名示例如下:

在原来first.sh文件操作
vi first.sh
NOOB="www.baidu.com"
LD_PATH="/bin/"
_var="123"
var2="zhangsan"

案例:
在这里插入图片描述
运行结果
在这里插入图片描述

无效的变量命名:

# 避免使用if作为变量名
if="some_value"
# 避免使用 $ 等特殊符号
variable_with_$=42
?var=123
user*name=runoob
# 避免空格
variable with space="value"

等号两侧避免使用空格:

# 正确的赋值
variable_name=value

# 有可能会导致错误
variable_name = value

使用变量方法

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="baoge"
echo $your_name
echo ${your_name}

推荐给所有变量加上花括号,这是个好的编程习惯。

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="baoge"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写 y o u r n a m e = " a l i b a b a " ,使用变量的时候才加美元符( your_name="alibaba",使用变量的时候才加美元符( yourname="alibaba",使用变量的时候才加美元符()。

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:


#!/bin/bash

myurl="www.baidu.com"
readonly myUrl
myurl="www.baoge.com"

案例
在这里插入图片描述

运行脚本,结果如下:
在这里插入图片描述

删除变量

使用 unset 命令可以删除变量。语法:

新建 txt.sh文件
vi txt.sh
chmod +x ./txt.sh  #使脚本具有执行权限
#!/bin/sh
name="zhangsan"
unset name
echo ${name}

变量被删除后不能再次使用。unset 命令不能删除只读变量。
案例
在这里插入图片描述

以上实例执行将没有任何输出。

在这里插入图片描述


课后练习

实操题一:Shell 脚本创建与运行

  • 题目要求

    1. 使用 vivim 编辑器创建一个名为 greeting.sh 的 Shell 脚本文件。
    2. 在脚本中,使用 echo 命令输出 “Today is a nice day!”。
    3. 设置该脚本的执行权限,并使用两种运行方式(作为可执行程序和作为解释器参数)运行该脚本,观察输出结果。
  • 操作步骤参考

    1. 打开终端,输入 vi greeting.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
echo "Today is a nice day!"
3. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
4. 给脚本添加执行权限:`chmod +x greeting.sh`。
5. 作为可执行程序运行:`./greeting.sh`。
6. 作为解释器参数运行:`/bin/sh greeting.sh`。

实操题二:Shell 变量操作

  • 题目要求

    1. 创建一个名为 var_operation.sh 的 Shell 脚本文件。
    2. 在脚本中定义一个变量 num,并赋值为 5
    3. 输出变量 num 的值。
    4. 将变量 num 的值重新定义为 10,再次输出变量 num 的值。
    5. 尝试将变量 num 定义为只读变量,然后再尝试重新赋值,观察结果。
  • 操作步骤参考

    1. 打开终端,输入 vi var_operation.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
num=5
echo "The value of num is: $num"
num=10
echo "The new value of num is: $num"
readonly num
num=15  # 此行会导致错误
3. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
4. 运行脚本:`./var_operation.sh`,观察输出结果以及错误提示(因为尝试修改只读变量)。

实操题三:综合运用 Shell 脚本与变量

  • 题目要求

    1. 创建一个名为 user_info.sh 的 Shell 脚本文件。
    2. 定义变量 name 为自己的姓名,变量 age 为自己的年龄,变量 hobby 为自己的爱好(均使用合适的变量名)。
    3. 在脚本中使用 echo 命令输出以下格式的信息:“My name is [姓名], I’m [年龄] years old and I like [爱好].”
    4. 尝试删除变量 age,然后再次输出上述信息,观察结果。
  • 操作步骤参考

    1. 打开终端,输入 vi user_info.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
name="Your Name"
age=25
hobby="Reading"
echo "My name is $name, I'm $age years old and I like $hobby."
unset age
echo "My name is $name, I'm $age years old and I like $hobby."
3. 将 `name`、`age` 和 `hobby` 的值替换为自己的真实信息。
4. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
5. 运行脚本:`./user_info.sh`,观察输出结果中第二次输出时年龄部分的变化(因为已删除该变量)。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941875.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络刷卡器的功能和使用场景

网络刷卡器是一种连接互联网的设备,能够通过网络将读取到的各种卡片信息传输至服务器进行处理。这类刷卡器通常支持多种类型的卡片,如银行卡、身份证、会员卡、公交卡等,并运用现代信息技术确保数据的安全性和高效性,功能十分强大…

Centos7下的根口令重置与GRUB修复

目录 1. 利用GRUB进入单用户模式重置根口令; 步骤较多方法 步骤较少方法:这里主要是把重新以rw方式挂载的步骤换为了在编辑模式直接修改 2. 利用Linux系统安装光盘进入急救模式重置根口令; 3. 如果GRUB损坏,利用Linu…

赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例

在工业4.0蓬勃发展的当下,工业机器人作为制造业转型升级的中流砥柱,正朝着超精密、极速响应的方向全力冲刺。然而,为其适配理想的望获实时Linux系统,却犹如寻找开启宝藏之门的关键钥匙,成为众多企业在智能化进程中的棘…

“无需代码,一句需求,立刻看到你的创意变成网页”==>前端AI工具 “V0”

想象一下,一个能帮你跳过所有烦人的代码编写过程,直接根据你的需求生成页面的 AI!没错,这就是 v0!你只需要用自然语言描述你想要的界面,v0 就会挥一挥它的“魔法鼠标”,立刻生成漂亮的 UI 代码。…

C语言(一)——初识C语言

目录 简单认识一段代码 数据类型 变量和常量 变量的作用域和变量的生命周期 常量 字符串 转义字符 注释 函数 数组 操作符 关键字 结构体 结构的声明 结构成员的类型 结构体变量的初始化 结构体传参 简单认识一段代码 main()函数是程序的入口,所以…

频繁拿下定点,华玉高性能中间件迈入商业化新阶段

伴随着智能驾驶渗透率的快速增长,中国基础软件市场开始进入黄金窗口期。 近日,华玉通软(下称“华玉”)正式获得某国内头部轨道交通产业集团的智能化中间件平台定点项目。这将是华玉在基础软件领域深耕和商业化发展过程中的又一重…

怎么学习数据结构与算法?

数据结构与算法 提及数据结构与算法,许多人可能会不自觉地皱起眉头。似乎在不知不觉中,以字节跳动为代表的一批公司,在面试环节开始了一场针对算法的连环盘问。若非事先系统地刷过一系列算法题目,想要轻松通过这一关,…

MySQL通过日志恢复数据的步骤

试验环境:Windows Server2012 r2、MySql-8.0.27-winx64。 1、先检查MySQL有没有开启binlog日志 通过下面的SQL命令查看MySQL是否开启日志以及日志文件的位置: show variables like %log_bin% 执行结果如下图所示: 图中,log_bi…

react+antd的Table组件编辑单元格

需求:新增加一行,且单元格可以编辑 场景:真实的业务需求(antd 3 版本react) 效果图:1. 默认增加一行时,第一列是下拉选择框,第2 3列是TextArea,图1 2. 当下拉选择的数据不…

基于Springboot的数码产品抢购系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…

LabVIEW电机控制中的主动消抖

在LabVIEW电机控制系统中,抖动现象(如控制信号波动或机械振动)会影响系统的稳定性和精度。通过使用主动消抖算法,可以有效降低抖动,提高控制性能。本文将介绍几种主流的主动消抖算法,并结合具体应用案例进行…

连续自成核退火热分级(SSA)技术表征共聚聚丙烯(PP)分子链结构

共聚聚丙烯是一种多相多组分高分子体系,体系中同时存在多种链组成、序列结构和相结构。研究表明,共聚聚丙烯中除了均聚聚丙烯外,还有乙丙无规共聚物(又称乙丙橡胶,EPR)及不同序列长度的乙丙嵌段共聚物&…

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法(英语:Dijkstras algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程: 1.首先设置开始节点的成本值为0,并将…

C# OpenCV机器视觉:缺陷检测

在一个阳光明媚的早晨,阿强正准备享受他的一杯咖啡,突然接到了老板的电话。“阿强,我们的生产线出现了问题!有几个产品的质量不合格,客户投诉不断!你能不能想办法解决这个问题?” 阿强一听&…

模型 ADDIE(分析、设计、开发、实施、评估)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。分析、设计、开发、实施、评估教学法。 1 模型ADDIE(分析、设计、开发、实施、评估)的应用 1.1 个人IP私域运营体系构建 在个人IP私域运营领域,ADDIE模型被应用于构建一个系统的运营体系…

【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训

首页-搜索框-跳转 引言 在微信小程序中,首页的搜索框是用户交互的重要入口。本文将通过“我的咖啡店”小程序的首页搜索框实现,详细介绍如何在微信小程序中创建和处理搜索框的交互。 1. 搜索函数实现 onClickInput函数在用户点击搜索框时触发&#x…

upload-labs-master第21关超详细教程

目录 环境配置解题思路利用漏洞 操作演示 环境配置 需要的东西 phpstudy-2018 链接: phpstudy-2018 提取码:0278 32 位 vc 9 和 11 运行库 链接: 运行库 提取码:0278 upload-labs-master 靶场 链接: upload-lasb-ma…

Elasticsearch:确保业务规则与语义搜索无缝协作

作者:来自 Elastic Kathleen DeRusso 利用查询规则与语义搜索和重新排序相结合的强大功能。 更多阅读: Elasticsearch 8.10 中引入查询规则 - query rules Elasticsearch 查询规则现已正式发布 - query rules 你是否知道查询规则(query ru…

mysql联表查询

创建多个表,语句如下: CREATE DATABASE /*!32312 IF NOT EXISTS*/sg_security /*!40100 DEFAULT CHARACTER SET utf8mb4 */;USE sg_security;/*Table structure for table sys_menu */DROP TABLE IF EXISTS sys_menu;CREATE TABLE sys_menu (id bigint(2…

(Orin NX - Ubuntu 20.04)环境配置-Mid360雷达版

换源 换到阿里云的源(不要清华的,有些东西会下载失败) 如有需要,可以安装一下基础终端工具 sudo apt-get update sudo apt-get install terminator byobu net-tools openssh-server -y 如果有需要,下载deb并安装NoM…