文章目录
- 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代表数字)、 n(n代表数字)、*、 @ 、 @、 @、#。
$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–变量