【Linux】变量定义规则、shell 格式、空格注意事项汇总

news2024/11/18 9:30:48

文章目录

  • 1. 空格问题
    • =号用于赋值
    • =用于比较
  • 2. 变量
    • 2.1 变量命名的格式要求
    • 2.2、shell变量中的注意事项
    • 2.3、变量的使用方法
    • 2.4、变量的类型
      • (1)自定义变量
      • (2)环境变量
      • (3)位置变量
      • (4)预定义变量
  • 参考

相关文章:
【Linux】变量定义、shell 格式、空格注意事项汇总
【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解
【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算
【Linux】shell中的比较符号(整数、字符串)与特殊符号介绍

1. 空格问题

=号可以用于赋值,也可以在 if 语句中用于比较

shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格。

=号用于赋值

shell脚本变量名和等号及等号和值之间不能有空格,这可能和我们熟悉的所有编程语言都不一样,变量命名须遵循如下规则:
• 首个字符必须为字母(a-z,A-Z)。
• 中间不能有空格,可以使用下划线(_)。
• 不能使用标点符号。
• 不能使用bash里的关键字(可用help命令查看保留关键字)。

赋值语句等号两边不能有空格,正例如:

[root@localhost ~]#i=1                          # 默认是整数,自动识别

[root@localhost ~]#PROV=BeiJing                 # 默认是字符串,自动识别

用作赋值时,两边绝对不能有空格,否则会在相应的行报 command not found 错误,此时,shell是把变量当一个命令执行的,而这个命令本身又不存在,反例:

[root ~]#PROV = BeiJing

执行时会提示:./tt.sh: line 14: PROV: command not found

如果所赋的值包含空格,可以用引号括起来(没有空格时也可以用引号,效果和不用一样),例如:

PROV="anhui province"

=用于比较

字符串比较,等号两边必须有空格,如:

除了=号,所有的比较符号都要两侧保证空格,更多的符号可以参见 【Linux】shell中的比较符号(整数、字符串)与特殊符号介绍

if [ "${sdpt}" = "sdpt_js" ]; then

注意[] 中 内容与括号也要留一个空格;

2. 变量

什么是变量,简单的说就是字面意思可变的量,比如a=1就是一个变量,变量就是一个暂时储存数据的地方,我们通过调用对应的变量名字就可以得到其对应的值。

2.1 变量命名的格式要求

在shell中给变量命名时有以下几个规则。

(1)shell变量的命名只能使用英文字母,数字和下划线,并且开头不能以数字开始。

(2)shell变量的命名中不能使用标点符号

(3)不能使用bash里的关键字(可用help命令查看保留关键字)。

正确的变量名:Name、name、_name

错误的变量名:3Name(首字母不能时数字)、na?me(不能带除了下划线外的其他标点符号)

2.2、shell变量中的注意事项

(1)变量名区分大小写,环境变量建议使用大写便于区分

(2)在shell中,变量和值之间不能有空格,即等号左右两侧不能有空格,如果变量需要有空格则需要使用引号,单引号和双引号在shell中有不同的作用,下面会详细说明下。

在这里插入图片描述
(3)单引号和双引号的区别

单引号不可识别特殊语法

双引号可以识别特殊语法

详情参见 【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解

在这里插入图片描述

2.3、变量的使用方法

定义好变量后该如何使用呢?使用一个定义好的变量只需要在变量前面加上 $ 符号即可。
在这里插入图片描述
可以看出带不带{}对变量进行输出时,输出结果都是一样的,但是一般情况下最好带上{},这样能很明确的看到变量名。

2.4、变量的类型

常见 Shell 变量的类型包括:自定义变量、环境变量、位置变量、预定义变量

(1)自定义变量

自定义变量就是我们平常用的最多的变量,定义自定义变量的方法为 变量名=变量值,我们可以对变量的名字自定义,但是必须要符合命名规则。
在这里插入图片描述

(2)环境变量

环境变量又可以叫做全局变量,定义环境变量时,需要使用export去声明。(和自定义变量的区别,自定义变量时局部变量,其变量的范围是仅在当前的Shell中生效,环境变量又可被叫做全局变量,其变量的范围是会在当前Shell和其子Shell中都生效)
在这里插入图片描述

(3)位置变量

位置变量就是bash将传递给脚本的参数,按照位置不同,保存在不同的位置变量中,以便于脚本调用这些变量,位置变量属于预定义变量的一种,常见的位置变量有 n ( n 代表数字)、 n(n代表数字)、 nn代表数字)、*、 @ 、 @、 @#。

$n:$0表示脚本的名称、$1-n代表里面的参数,10以上的参数需要大括号表示比如:{10}

$*:显示向脚本传递的所有参数,但是会把所有的参数看成一个整体

$@:显示向脚本传递的所有参数,但是会把每个参数单独进行展示

$#: 表示传递到脚本的参数的个数

示例,创建一个脚本,命名为 wzbl.sh:

#! /bin/sh
echo "shell脚本名字:$0"
echo "参数1:$1"
echo "参数2:$2"
echo "参数3:$3"
echo "参数4:$4"
echo "参数5:$5"
echo "参数6:$6"
echo "参数7:$7"
echo "参数8:$8"
echo "参数9:$9"
echo "参数10:${10}"
echo "所有的参数,以一个字符串显示:$*"
echo "所有的参数,区分每个字符串显示:$@"
echo "显示传递到脚本的参数的个数:$#"               

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

(4)预定义变量

预定义变量也是Bash中已经定义好的变量,变量名不能自定义,变量作用是固定的。常见的预定义变量有$?、$$、$!

  • $?:前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常
    在这里插入图片描述
  • $$:返回当前进程的进程号(PID)

脚本:

#! /bin/bash
echo "输出当前进程的进程号(PID):$$"

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

  • $!:返回最后一个后台进程的进程号(PID)
    在这里插入图片描述

参考

shell 脚本中 空格的注意问题:= 赋值两边不能有空格,而if比较判断时 = 两边必须加空格
Shell变量赋值语句不能有空格
Linux与Shell学习–shell系列3–变量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高并发-用户中心】读多写少的系统如何优化

本博客纯属个人总结,非原创。喜欢技术交流的,可关注博主,武汉有后端开发群,可支持内推,了解武汉行情等。 如何对读多写少的系统进行高并发优化? 比如:用户中心是一个读多写少的系统&#xff0…

Linux定时备份MySql数据库

一、创建文件 cd / mkdir mysqlbackup vi mysqlbackup.sh然后将下面的代码更改后复制上去即可。 #!/bin/bash mysqldump -uroot -ppassword database > /mysqlbackup/database__$(date %Y%m%d_%H%M%S).sqlpassword指的是MySql的密码,database指的是所要备份的…

【C++算法】dfs深度优先搜索(上) ——【全面深度剖析+经典例题展示】

💃🏼 本人简介:男 👶🏼 年龄:18 📕 ps:七八天没更新了欸,这几天刚搞完元宇宙,上午一直练🚗,下午背四级单词和刷题来着,还在忙一些学弟…

leaflet: 禁止拖拽、禁止zoom(双击、滚轮、键盘)、禁止tap(076)

第076个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中设定各种禁止状态,这里设置了禁止拖拽、禁止zoom(双击、滚轮、键盘)、禁止tap。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共73行)相关A…

linux高级命令之多进程的使用

多进程的使用学习目标能够使用多进程完成多任务1 导入进程包#导入进程包import multiprocessing2. Process进程类的说明Process([group [, target [, name [, args [, kwargs]]]]])group:指定进程组,目前只能使用Nonetarget:执行的目标任务名…

电商导购CPS,京东联盟如何跟单实现用户和订单绑定

前言 大家好,我是小悟 做过自媒体的小伙伴都知道,不管是发图文还是发短视频,直播也好,可以带货。在你的内容里面挂上商品,你自己都不需要囤货,如果用户通过这个商品下单成交了,自媒体平台就会…

【刷题笔记】--搜索二维矩阵 II

题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16…

设计师都在看的全球设计网站,你居然还不知道!

设计师需要拥有无限的创意和熟练的技巧,并且对行业的前景和客户的心理有一定的了解。要能达到“陌生化”之前,肯定是有知识储备,专业能力的前提要求,以及创新能力。 今天为大家整理了多个优秀全球设计网站,这些博客内…

大家都在聊的自动化办公到底是什么?

自动化办公无非是excel、ppt、word、邮件、文件处理、数据分析处理、爬虫这些,下面就详细介绍一下!文章最后分享了很不错的python学习教程,适合零基础初学的小伙伴,希望可以对你有所帮助!! excel自动化 我…

linux基本功系列之grep命令

文章目录前言一. grep命令介绍二. 语法格式及常用选项三. 参考案例3.1 搜索文件中以root开头的文件3.2 搜索文件中出现的root3.3 搜索除了匹配行之外的行3.4 匹配的部分使用颜色显示3.5 只输出文件中匹配到的地方3.6 输出包含匹配字符串的行,并显示所在的行数3.7 统…

Unity CircleLayoutGroup 如何实现一个圆形自动布局组件

文章目录简介实现原理Editor 编辑器简介 Unity中提供了三种类型的自动布局组件,分别是Grid Layou Group、Horizontal Layout Group、Vertical Layout Group,本文自定义了一个圆形的自动布局组件Circle Layout Group,如图所示: Ra…

Maven的安装步骤(保姆级安装教程)

一、安装本地Maven 选择你需要的maven版本下载:官网下载传送门 我使用的是3.6.1版本:maven-3.6.1-bin.zip 二、安装 把下载好的maven压缩包解压到一个没有中文,空格或其他特殊字符的文件夹,如: 三、配置环境变量…

Python 编程必备:盘点nginx和gunicorn的几大用法,建议收藏

程序员是新兴技术工种中比较高薪的一个,在互联网公司,程序员往往与秃头,压力大,找不到女朋友等等挂钩。 最近,最新技能类榜单出炉,这是一个关于程序员自己给自己贴的几个标签。 其中,不难看出…

美国CPC认证是什么?儿童玩具亚马逊CPC认证审核有哪些问题?

很多卖家都有遭遇listing下架,被要求提供CPC认证报告。这是因为亚马逊有时会加强对儿童产品的审查。本文带大家对CPC认证进行一个全面了解。什么是CPC认证?CPC认证,全称ChildrensProductCertification.是认可实验室,根据产品不同适…

Hive学习——单机版Hive的安装

目录 一、基本概念 (一)什么是Hive (二)优势和特点 (三)Hive元数据管理 二、Hive环境搭建 1.自动安装脚本 2./opt/soft/hive312/conf目录下创建hive配置文件hive-site.xml 3.拷贝一个jar包到hive下面的lib目录下 4.删除hive的guava,拷贝hadoop下的guava 5…

Java中常见的编码集问题

收录于热门专栏Java基础教程系列(进阶篇) 一、遇到一个问题 1、读取CSV文件 package com.guor.demo.charset;import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.HashMap; import java.util.L…

Syntax-Aware Aspect-Level Sentiment Classification with PWCN 论文阅读笔记

一、作者 Chen Zhang, Qiuchi Li, and Dawei Song. 2019. Syntax-Aware Aspect-Level Sentiment Classification with Proximity-Weighted Convolution Network. In Proceedings of the 42nd International ACM SIGIR Conference on Research and Development in Information …

jsp游泳馆门票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp游泳馆门票管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,…

MySQL的存储引擎

目录 一.概念 二.分类 操作 修改默认存储引擎 一.概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不…

数据预处理——数据无量纲化(归一化、标准化)

文章目录1. 数据归一化1.1 数据归一化定义1.2 MinMaxScaler 归一化1.3 MinMaxScaler 使用样例2. 数据标准化2.1 数据标准化定义2.2 StandardScaler 标准化2.3 StandardScaler 使用样例StandardScaler和MinMaxScaler选哪个?在机器学习算法实践中,我们往往…