【Linux Shell】2. Shell 变量

文章目录

  • 【 1. 变量命名规则 】
  • 【 2. 变量的使用 】
  • 【 3. 只读变量 】
  • 【 4. 删除变量 】
  • 【 5. 变量类型 】
  • 【 6. Shell 字符串 】
    • 6.1 字符串的分类
    • 6.2 字符串操作
  • 【 7. Shell 数组 】
    • 7.1 定义数组
    • 7.2 读取数组
    • 7.3 获取数组的长度
  • 【 8. Shell 注释 】
    • 8.1 单行注释
    • 8.2 多行注释

【 1. 变量命名规则 】

  • 定义变量时,变量名不加美元符号$(PHP语言中变量需要),如:
your_name="runoob"
  • 变量名和等号之间不能有空格 。
  • 变量名的命名须遵循如下规则:
    • 只包含字母、数字和下划线: 变量名可以包含字母( 大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
    • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
    • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
    • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
    • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
    • 避免使用空格: 变量名中不应该包含空格,因为 空格通常用于分隔命令和参数
  • 实例1:有效的 Shell 变量名。
RUNOOB="www.runoob.com"
LD_LIBRARY_PATH="/bin/"
_var="123"
var2="abc"
  • 实例2:无效的 Shell 变量名。
# 避免使用if作为变量名
if="some_value"

# 避免使用 $ ?* 等特殊符号
variable_with_$=42
?var=123
user*name=runoob

# 避免使用空格
variable with space="value"

【 2. 变量的使用 】

  • 使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
  • 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把 $skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号,这是个好的编程习惯。

  • 已定义的变量,可以被重新定义,如:
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写$your_name=“alibaba”,使用变量的时候才加美元符($),即 赋值的时候不加美元符号

【 3. 只读变量 】

  • 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash

myname="MR_Promethus"
readonly myname
myname="Chinese"

在这里插入图片描述

【 4. 删除变量 】

  • 使用 unset 命令可以删除变量(不能删除只读变量),变量被删除后不能再次使用。语法:
unset variable_name
  • 实例:
#!/bin/sh

myUrl="MR_Promethus"
unset myUrl
echo $myUrl

在这里插入图片描述

【 5. 变量类型 】

  • Shell 支持不同类型的变量,其中一些主要的类型包括:
变量类型定义规则实例
字符串变量使用 单引号 ’ 或双引号 " 来定义字符串my_string='Hello, World!'
my_string="Hello, World!"
整数变量使用 declare 或 typeset 命令来声明整数变量,这样的变量只包含整数值。这样的声明告诉 Shell 将 my_integer 视为整数,如果尝试将非整数值赋给它,Shell会尝试将其转换为整数。declare -i my_integer=42
数组变量数组允许我们在一个变量中存储多个值。可以是整数索引数组或关联数组。整数索引数组: my_array=(1 2 3 4 5)
关联数组:declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30
环境变量这些是由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境。例如:PATH 变量包含了操作系统搜索可执行文件的路径:echo $PATH
特殊变量有一些特殊变量在 Shell 中具有特殊含义$0 表示脚本的名称,$1、$2等表示脚本参数。¥#表示传递给脚本的参数数量,¥?表示上一个命令的退出状态等。

【 6. Shell 字符串 】

  • 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

6.1 字符串的分类

字符串类型定义规则实例
单引号字符串单引号里的任何字符都会原样输出, 单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
bash str='this is a string'
双引号字符串 双引号里可以有变量
双引号里可以出现转义字符
your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

6.2 字符串操作

  • 获取字符串长度
string="abcd"
echo ${#string}   # 输出 4

变量为字符串时,${#string} 等价于 ${#string[0]}:

string="abcd"
echo ${#string[0]}   # 输出 4
  • 提取子字符串
    以下实例从字符串第 2 个字符开始截取 4 个字符注意:第一个字符的索引值为 0 :
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
  • 查找子字符串
    查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

【 7. Shell 数组 】

  • bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。
  • 类似于 C 语言, Shell 数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

7.1 定义数组

  • 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
  • 例如:
array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

7.2 读取数组

  • 读取数组元素值的一般格式是:
${数组名[下标]}
  • 实例:
valuen=${array_name[n]}
  • 使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}

7.3 获取数组的长度

  • 获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}

# 或者
length=${#array_name[*]}

# 取得数组单个元素的长度
length=${#array_name[n]}

【 8. Shell 注释 】

  • 以 # 开头的行就是注释,会被解释器忽略。

8.1 单行注释

通过每一行加一个 # 号设置注释,像这样:

#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束  #####

8.2 多行注释

  • 如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
  • 直接使用冒号 : 号命令,并用单引号 ’ 将多行内容括起来。由于冒号是一个空命令,这些内容不会被执行。
    格式为:: + 空格 + 单引号
: '
这是注释的部分。
可以有多行内容。
'
  • 使用 Here 文档,多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF

以上例子中,: 是一个空命令,用于执行后面的 Here 文档,<<‘EOF’ 表示开启 Here 文档,COMMENT 是 Here 文档的标识符,在这两个标识符之间的内容都会被视为注释,不会被执行。EOF 也可以使用其他符号:

: <<'COMMENT'
这是注释的部分。
可以有多行内容。
COMMENT

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

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

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

相关文章

『开发工具篇』- 配置 gradle 等相关依赖镜像源

『开发工具篇』- 配置 gradle 等相关依赖镜像源 1.更换gradle下载源2. 配置setting.gradlekts文件gradle文件 1.更换gradle下载源 使用腾讯云的镜像库https://mirrors.cloud.tencent.com/gradle/ gradle-x.x-all.zip&#xff1a;编译后的二进制发布版以及源码和文档gradle-x.…

C++面向对象语法总结(二)

目录 《C面向对象语法总结(一&#xff09;》 十一、继承 继承&#xff0c;可以让子类拥有父类的多有成员&#xff08;变量、函数&#xff09;如下面的代码&#xff1a;Student是子类&#xff08;subclass,派生类&#xff09;&#xff0c;Person是父类&#xff08;superclass…

感恩客户·持续向上-契约锁电子签章

2023年&#xff0c;电子签章成为组织数字化建设中的刚性需求&#xff0c;市场机遇帮助契约锁实现了产品、伙伴、客户、应用场景等全方位的持续发展。 感恩客户和伙伴的支持&#xff0c;让契约锁在2023年不断成长和进步。 感恩客户相伴成长 2023年&#xff0c;契约锁为“政府机关…

【2024.01.03】转行小白-刷css面试题01

总结 1.margin 负值问题 margin-top 和 margin-left 负值&#xff0c;元素向上、向左移动&#xff0c;自己动margin-right 负值&#xff0c;右侧元素左移&#xff0c;自身不受影响&#xff0c;别人动margin-bottom 负值&#xff0c;下方元素上移&#xff0c;自身不受影响 &am…

虾皮跨境电商选品有哪些规则

如何在虾皮&#xff08;Shopee&#xff09;平台上进行跨境电商选品在如今全球化的商业环境中&#xff0c;跨境电商已成为许多卖家拓展业务的重要途径。虾皮&#xff08;Shopee&#xff09;作为一家知名的跨境电商平台&#xff0c;为卖家提供了丰富的销售机会。然而&#xff0c;…

C++八股学习心得.3

1.C 数组 C 支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素&#xff0c;最高的地址对应最后一个…

图像识别原理

图像识别是计算机视觉领域中的一个重要任务&#xff0c;其目标是使计算机系统能够理解和解释图像中的信息。以下是图像识别的基本原理&#xff1a; 1. 数据采集&#xff1a;首先&#xff0c;需要获取图像数据。这可以通过摄像头、传感器、扫描仪等设备来实现。图像可以是静态的…

专访 | STIF2023第四届国际科创节访第七在线CEO赵嘉程

12月15日&#xff0c;在STIF2023第四届国际科创节暨数服会上&#xff0c;第七在线获得年度数智化创新典范奖&#xff0c;第七在线CEO赵嘉程在颁奖典礼现场接受了媒体专访。 主持人&#xff1a;赵总&#xff0c;您好&#xff0c;欢迎您接受我们的专访&#xff0c;首先我们特别想…

业务中台-UAT测试用例示例

今天我来和大家分享一下我们在业务中台UAT测试用例的案例&#xff0c;这个案例的编写方式是参考了其他项目来编写的。这个测试用例主要分为两个部分&#xff1a;用例目录和测试具体内容。 对于UAT测试用例&#xff0c;我们理解应该存在两种不同的编写方式&#xff0c;一种是功…

为自己办一场个展和你的2023告别,上传图片就能生成720云3D线上展厅

来和你的2023告个别吧。只需上传图片并选择一个漂亮的3D展厅&#xff0c;就能生成你的专属展览。在这里&#xff0c;你可以回顾手机里的精彩瞬间&#xff0c;分享你的美好生活或是你的摄影大片、书画作品&#xff0c;也可以是任何值得纪念的瞬间。 通过720云3D空间漫游模板&…

Web前端第9章思维导图

本章内容是关于CSS样式属性&#xff0c;包含CSS单位、CSS字体样式、CSS文本样式、CSS颜色与背景、CSS列表样式、CSS盒模型。重点在于CSS盒模型、CSS文本样式、CSS字体样式。 1. CSS单位 绝对单位 磅&#xff08;pt&#xff09;&#xff0c;pica&#xff08;pc&#xff09;、c…

【EI会议征稿通知】第三届工程管理与信息科学国际学术会议 (EMIS 2024)

第三届工程管理与信息科学国际学术会议 (EMIS 2024) 2024 3rd International Conference on Engineering Management and Information Science 【国际高级别专家出席/新加坡机器人学会支持】 第三届工程管理与信息科学国际学术会议 (EMIS 2024)将于2024年4月12-14日在中国洛…

如何使用LightsOut生成经过混淆处理的DLL

关于LightsOut LightsOut是一款功能强大的DLL生成工具&#xff0c;该工具可以帮助广大研究人员轻松生成经过混淆处理的DLL。该工具专为红队研究人员设计&#xff0c;生成的DLL可以在研究人员尝试绕过反病毒产品时禁用AMSI和ETW&#xff0c;从而更好地测试目标系统的安全性。 …

五步解决Ubuntu界面太小的问题

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09; 对于20版本及以上的unbuntu我们可以通过安装open-vm-tools来解决界面大小的问题&#xff0c;具体步骤如…

[GKCTF 2020]cve版签到

[GKCTF 2020]cve版签到 wp 信息搜集 题目页面&#xff1a; 页面中有提示&#xff1a;You just view *.ctfhub.com 点一下 View CTFHub 会回弹一些信息&#xff1a; 抓包看看&#xff1a; url 传参&#xff0c;判断是 ssrf 。但是当我将其改为 http://www.baidu.com 或者是…

LiveGBS流媒体平台GB/T28181常见问题-如何配置快照目录快照存储默认目录目录如何配置

LiveGBS流媒体平台GB/T28181常见问题-如何配置快照目录快照存储默认目录目录如何配置 1、快照目录2、指定快照目录3、搭建GB28181视频直播平台 1、快照目录 部署LiveGBS后&#xff0c; 再查看通道播放后 或是 获取通道快照后&#xff0c;就会在LiveSMS部署的服务器里面存储对应…

HackTheBox - Medium - Linux - Investigation

Investigation Investigation 是一款 Linux 机器&#xff0c;难度为中等&#xff0c;它具有一个 Web 应用程序&#xff0c;可为图像文件的数字取证分析提供服务。服务器利用 ExifTool 实用程序来分析图像&#xff0c;但是&#xff0c;正在使用的版本存在命令注入漏洞&#xff…

共识算法介绍

文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…

CMake入门教程【基础篇】HelloCMake

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 概述核心实现代码示例…

AI:111-基于深度学习的工业设备状态监测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…