Linux之Shell进阶(变量和条件判定语句)

2023-07-12 13:12:22

变量

变量的含义

什么是量?

  • 量就是数据.

什么是变量?

  • 数据可以发生改变就是变量。

在一个脚本周期内,其值可以发生改变的量就是变量。
什么叫做一个脚本周期?

  • 一个脚本周期我们可以简单的理解为当前的shell文件。

变量是shell中不可或缺的一部分,也是最基础、最重要的组成部分。

变量的定义与使用(重点)

变量,先定义后使用。

定义形如:hello=“hello 666”
使用形如:echo $hello

变量就是由2部分组成,一个是变量名(左边),另外一部分是变量的值(右边),类似于Java中变量的定义,只不过Java中的变量还有个变量类型。

变量名和变量值是什么关系??
变量名和变量值是使用和被使用关系; 我们的变量名来使用变量值;
在使用变量的时候一定需要在变量名前面添加一个$符号,该要求在其他语言中也存在的(例如php)。

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

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线“_”。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

问题:以下哪个shell变量名是合法的?
A. var B.?var C. user*name D.echo

案例1:使用变量改写入门脚本中的第1个shell脚本。

#!/bin/bash
hello="hello world 666"
echo $hello
[root@localhost aaa]# ./test.sh
hello world 666

关于单双引号的问题:

  • 双引号能够识别变量,双引号能够实现转义(类似于“*”)
  • 单引号是不能识别变量,只会原样输出,单引号是不能转义的

案例2:定义一个变量,输出当前时间,要求格式为“年-月-日 时:分:秒”。

#!/bin/bash
datetime=`date +'%F %T'`
echo $datetime

注意:反引号(esc键下方的那个键),当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”。

只读变量

语法:readonly 变量名
案例:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值

#!/bin/bash
a=10
readonly a
a=20
echo $a
[root@localhost aaa]# ./test2.sh
./test2.sh: line 4: a: readonly variable
10

接收用户输入

语法:**read -p 提示信息 变量名**
案例:编写一个脚本test6.sh,要求执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件

#!/bin/bash
read -p '请输入需要创建的文件路径'  filepath
touch $filepath
echo '文件创建成功,路径为:'$filepath

在这里插入图片描述

删除变量

语法:unset 变量名
案例:定义变量b=20,再输出b的值,随后删除b,最后再输出下b

#!/bin/bash
b=10
echo $b
unset b
echo $b

在这里插入图片描述

条件判断语句

老婆给当程序员的老公打电话:下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。当晚,程序员老公手捧一个包子进了家门…老婆怒道:你怎么就买了一个包子?!老公答曰:因为看到了卖西瓜的。
把程序员老婆的话当作一段需求分析一下吧。买一斤包子是一个确定无疑的需求项,无论后面是什么情况什么条件,前面这一斤包子是肯定要买的。看到卖西瓜的是一个条件判断,后面“买一个”是一个模糊不清的需求项,买一个什么呢?需求里没说啊。客户把这个当作开发人员默认了解的内容了。可是作为一个成熟合格的程序员,该老婆的丈夫应该马上跟进确认需求“买一个什么?”,要不然程序可怎么写呢?所以笑话里该程序员是不合格的,起码是不积极不负责的。在没有明确需求的情况下,他只能按照自己的理解来完成工作了。那比较可能的结果就有如下几种:

  1. 看到卖西瓜的,买一个西瓜
    如果看到卖西瓜的
    那么
    买一个西瓜
    否则
    买一斤包子
  2. 看到卖西瓜的,买一个包子
    如果看到卖西瓜的
    那么
    买一个包子
  3. 看到卖西瓜的,买一个卖西瓜的
  4. 看到卖西瓜的,买一个老婆一直想买的东西
  5. 看到卖西瓜的,随便买一个东西

上述1和2下面的条件汉字描述称之为“伪代码”,也是属于条件表达式的语法。

语法1(一个条件):
if condition
then
command1
command2

fi

单行写法(一般在命令行中执行的时候):if [ condition ]; then command; fi

语法2(两个条件):
if condition
then
command1
command2

else
command
fi

语法3(多个条件):
if condition1
then
command1
elif condition2
**then **
command2
else
commandN
fi

相关文章:Linux之Shell基础入门

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。
主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

更多推荐

虚幻4学习笔记(11) 蓝图实现AI移动、AI树实现移动、看见后寻找玩家

虚幻4学习笔记蓝图实现AI移动导航网格体人物移动AI跟随样条线移动AI树实现移动看见后寻找玩家靠近玩家挥拳B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732蓝图实现AI移动导航网格体添加导航网格体边界体积(AI可活动的区域)按P键可以显示/隐藏区域范围导航网格体边

dockerfile介绍与使用案例

1.概述dockerfile可以理解为一个制作镜像的脚本,但远没有脚本复杂。他根据某种格式自定义内容,就可以快速创建出需求的镜像。docker容器启动的时候在最上层挂载了一个可写层,比如说我在容器里面创建一个文件,这个文件是存放在可写层的,这时候容器要是销毁了,那么我们对容器的一些写入操作也就没了,我这个文件也会随着容

【c语言】指针和数组笔试题

1.指针和数组笔试题解析一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));//a单独放在sizeof内表示求整个数组的字节-----16printf("%d\n",sizeof(a+0));//a不是单独放在sizeof内部,表明是首元素的地址,地址占4/8个字节,32位机器占

gRpc_go_dart-1.编写第一个服务

​通俗的讲下grpc简化掉所有复杂的实现,它要求服务端和客户端之间按照protobuf的规范进行数据交换,所以服务端和客户端都不用关心彼此的代码实现,只关心按照protobuf的形式提供数据为什么是go和dart技术栈,已经是google的形状了同时,go客户端和Flutter间本身通过http协议不好交接数据,用gr

Seata1.5.2解决分布式事务问题

分布式事务–Seata​前面了解到一些分布式事务的解决方案,业内也涌现出不少解决分布式事务的优秀框架,如Atomikos、Seata等,本章来了解使用下Seata。​Seata的前身是Fescar,而后改名Seata,简单可扩展的自治分布式事务框架。Seata为用户提供了AT、TCC、SAGA和XA事务模式(默认使用A

【学习笔记】各类基于决策单调性的dp优化

文章目录对于决策单调性的一般解释关于决策单调性的证明四边形不等式一维dp区间dp一种二维dp一些满足四边形不等式的函数类与图形相结合决策单调性的常见优化手段二分队列二分栈分治类莫队做法SMAWKWQS二分+WQS多解情况满足四边形不等式的序列划分问题的答案凸性以及WQS二分的方案构造WQS外层二分时的边界Tips:斜率

容器【容器介绍、Set接口介绍、 HashSet容器的使用、TreeSet容器的使用】(三)-全面详解(学习总结---从入门到深化)

目录LinkedList容器介绍Set接口介绍HashSet容器的使用通过HashSet存储自定义对象TreeSet容器的使用LinkedList容器介绍LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一

SOLIDWORKS PDM—数据库的备份计划

SOLIDWORKS产品数据管理(PDM)解决方案可帮助您控制设计数据,并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用SOLIDWORKSPDMProfessional,您的团队能够:1.安全地存储和索引设计数据以实现快速检索;2.打消关于版本控制和数据丢失的顾虑;3.与多个地点的组织内外部的人员就设计进

Docker+jenkinsPipeline运行实现python自动化测试(超详细)

一、实现思路在Linux服务器安装docker创建jenkins容器jenkins中创建pipeline项目根据自动化项目依赖包构建python镜像(构建自动化python环境)运行新的python容器,执行jenkins从仓库中拉下来的自动化项目执行完成之后删除容器二、环境准备Linux服务器一台(我的是CentOS

[Docker精进篇] Docker镜像构建和实践 (三)

前言:Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中,以便在不同环境中快速、可靠地部署和运行应用程序。文章目录Docker镜像构建1️⃣是什么?2️⃣为什么?3️⃣镜像构建一、用现有容器构建新镜像二、Dockerfile构建镜像4️⃣总结这篇文章是我的笔记,旨在带您快速入门上手docke

Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

Docker进阶:DockerCompose(容器编排)管理多容器应用—实战案例演示一、DockerCompose简介二、DockerCompose安装三、DockerCompose卸载四、DockerCompose核心概念4.1、一文件原则(docker-compose.yml)4.2、服务(service)4.3、

热文推荐