【Linux Shell】2. Shell 变量

文章目录

  • 【 1. 变量命名规则 】
  • 【 2. 变量的使用 】
  • 【 3. 只读变量 】
  • 【 4. 删除变量 】
  • 【 5. 变量类型 】
  • 【 6. Shell 字符串 】
    • 6.1 字符串分类
    • 6.2 字符串操作
  • 【 7. Shell 注释 】
    • 7.1 单行注释
    • 7.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; doecho "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/bashmyname="MR_Promethus"
readonly myname
myname="Chinese"

在这里插入图片描述

【 4. 删除变量 】

  • 使用 unset 命令可以删除变量(不能删除只读变量),变量被删除后不能再次使用。语法:
unset variable_name
  • 实例:
#!/bin/shmyUrl="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 注释 】

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

7.1 单行注释

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

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

7.2 多行注释

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统使用超详细(八)~磁盘管理

目录 一、认识磁盘 二、磁盘运行机制 三、磁盘检查 3.1查找设备名称和分区号 3.1.1使用lsblk命令&#xff1a; 3.1.2使用fdisk命令&#xff1a; 3.1.3使用blkid命令&#xff1a; 3.2检查方向 3.2.1文件系统完整性&#xff1a; 3.2.2磁盘健康状态&#xff1a; 3.2.3磁…

2024-python画图永久解决 matplotlib 中文乱码

2024-python画图永久解决 matplotlib 中文乱码 不多说了吧&#xff0c;大家肯定是自己安装了python&#xff0c;这些环境了&#xff0c;毕竟都知道乱码了&#xff0c;所有此处省略1万字&#xff0c;如果这些前期不会的&#xff0c;就不要来找我了&#xff0c;自己解决&#xf…

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点&#xff0c; P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …

DeepPurpose 生物化学深度学习库;蛋白靶点小分子药物对接亲和力预测虚拟筛选

参考: https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/107649770 https://github.com/kexinhuang12345/DeepPurpose ##安装 pip install DeepPurpose rdkitDeepPurpose包括: 数据: 关联TDC库下载,是同一作者开发的 https://blog.csdn.net/weixin_42357472/artic…

认识Git

&#x1f30e;初识Git 初识Git 什么是Git Git的安装       Centos平台安装Git       Ubuntu平台安装Git Git的基本操作       创建远程仓库       配置Git 认识工作区、暂存区与版本库       添加文件到暂存区       将暂存区文件提交至本…

web期末个人引导页透明版

效果图 代码 css代码 * {box-sizing: border-box; }body {color: #2b2c48;font-family: "Jost", sans-serif;background-image: url(../img/bg.jpg);background-repeat: no-repeat;background-size: cover;background-position: center;background-attachment: fix…

在 PyCharm 中使用 Copilot

GitHub Copilot 由 OpenAI Codex 提供支持&#xff0c;可帮助用户在编辑器中实时工作。 它使用强大的 GPT-3 模型版本&#xff0c;该模型在大量开源代码上进行训练。 此外&#xff0c;GitHub Copilot 可在不同的 IDE&#xff08;集成开发环境&#xff09;上使用&#xff0c;包…

【数据仓库与联机分析处理】数据仓库工具Hive

目录 一、Hive简介 &#xff08;一&#xff09;什么是Hive &#xff08;二&#xff09;优缺点 &#xff08;三&#xff09;Hive架构原理 &#xff08;四&#xff09;Hive 和数据库比较 二、MySQL的安装配置 三、Hive的安装配置 1、下载安装包 2、解压并改名 3、配置环…

力扣labuladong一刷day54天前缀树

力扣labuladong一刷day54天前缀树 文章目录 力扣labuladong一刷day54天前缀树一、208. 实现 Trie (前缀树)二、648. 单词替换三、211. 添加与搜索单词 - 数据结构设计四、1804. 实现 Trie &#xff08;前缀树&#xff09; II五、677. 键值映射 一、208. 实现 Trie (前缀树) 题…

Hive实战:网址去重

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS数据文件创建Hive外部表4、利用Hive SQL实…

【MySQL用户管理】

目录&#xff1a; 前言用户管理创建用户删除用户修改用户密码修改用户密码安全检测设置 用户权限添加权限回收权限 总结 前言 剑指offer&#xff1a;一年又13天 用户管理 mysql> show databases; -------------------- | Database | -------------------- | inf…

R304S 指纹识别模块功能实现示例

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…