Shell变量基础与常用运算符

Shell变量的命名规则:

  • 命名只能是字母、数字、下划线组成,首个字母不能以数字开头
  • 中间不能有空格,可以使用下划线
  • 不能使用标点符号,不能使用bash里面的关键字(可用help命令查看保留关键字)

注意事项:

1.若指定的变量名已存在,相当于为此变量重新赋值
2.等号两边不要有空格
3.变量名由字母/数字/下划线组成,区分大小写
4.变量名不能以数字开头,不要使用关键字和特殊字符
5.查看变量时,若变量名称和后面的字符串连在一起,则应该以{}将变量名括起来以便于区分(下面有举例子说明,第4个例子“d”)

定义/赋值变量:

变量名=变量值
在命令行直接定义的变量是临时变量,想要设置永久的变量需要在相关配置文件里面设置;
全局文件为/etc/profile,对所有的用户有效;
用户文件为~/.bash_profile,仅对指定用户有效;

变量的类型:

  • 环境变量:用于保存操作系统运行时使用的环境参数
  • 位置变量:Bash将传递给脚本的参数保存在位置变量中,以便于在脚本中引用这些参数
  • 预定义变量:由系统保留和维护的一组特殊的变量,这些变量通常用于保存程序运行状态等
  • 自定义变量:由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等

常见的环境变量:

PWD:表示当前路径
PATH:shell寻找命令或者程序的路径
USER:表示当前用户
LOGNAME:当前用户的登录名
UID:表示用户的id号
SHELL:表示当前用户shell的类型
HOME:当前用户的家目录
PS1:表示shell环境的以及提示符,即命令行提示符(\u用户名、\h主机名、\W工作目录、$权限标识,对于root用户是#,对于普通用户是$)
在这里插入图片描述

引用变量值: $变量名
查看变量值: echo $变量名,echo ${变量名}
取消变量: unset 变量名
使用env可以查看系统所有的环境变量
使用set可以查看系统的所有变量

实例:
a.定义一个临时变量a,值为8:
在这里插入图片描述
b.取消变量a:
在这里插入图片描述
c.定义一个永久变量b,值为123:
在/etc/profile文件里面找一空行添加“b=123”再重新加载/etc/profile文件就可以了
在这里插入图片描述
在这里插入图片描述
d.定义一个变量abc,值为5,输出5RMB:
在这里插入图片描述
常见的位置变量跟预定义变量的含义:

$0:输出脚本的名称
$1:传入脚本的第一个参数
$2:传入脚本的第二个参数
$*:列出传递到脚本的所有参数
$#:传递到脚本的参数的个数
$$:当前运行的脚本的进程号
$!:后台运行的最后一个进程号
$?:显示最后一条命令的推出状态,输出值为0表示没有错误,输出非0值表示上一条命令运行有错误

#可以通过写这样的一个简单脚本验证一下:
https://i-blog.csdnimg.cn/blog_migrate/70cc2114855e6fec5f7bcf6c9beb6518.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDkwMTU2NA==,size_16,color_FFFFFF,t_70
#运行脚本ceshi.sh,接上参数1 2:
在这里插入图片描述
输出结果的第一行为$0

输出结果的第二行为$1

输出结果的第三行为$2

输出结果的第四行为$*

输出结果的第五行为$#

输出结果的第六行为$$

输出结果的第七行为$!

输出结果的第八行为$?

关系运算符:

-eq:等于(检测两个数是否相等,相等为真),如:[ $a -eq $b ]
-ne:不等于(检测两个数是否不相等,不相等为真),如:[ $a -ne $b ]
-gt:大于(左边数的数是否大于右边的,如果是,则为真),如:[ $a -gt $b ]
-lt:小于(检测左边的数是否小于右边的,如果是,则为真),如:[ $a -ge $b ]
-ge:大于或者等于(检测左边的数是否大于或者等于右边的,如果是,则为真),如:[ $a -lt $b ]
-le:小于或者等于(检测左边的数是否小于或者等于右边的数,如果是,则为真),如:[ $a -le $b ]

逻辑运算符:

&&:&&左边的命令返回真(即返回0,成功被执行)后,&&右边的命令才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。(逻辑的and)

||:||则与&&相反。如果||左边的命令未执行成功,那么就执行||右边的命令;或者换句话说,“如果这个命令执行失败了||那么就执行这个命令“。(逻辑的or)

字符串运算符:

=:检测两个字符串是否相等
!=:检测两个字符串是否不相等
-z:检测字符串长度是否为0(为空)
-n:检测字符串长度是否不为0(不为空)
$:检测字符串是否为空

==:可用于判断变量是否相等
=:除了可用于判断变量是否相等外,还可以表示赋值

#=与==在[ ]中表示判断(字符串比较)时是等价的

文件测试运算符:

-b:检测文件是否为块设备
-c:检测文件是否是字符设备文件
-d:检测文件是否是目录,如果是,则返回true
-f:检测文件是否是普通文件(既不是目录,也不是设备文件)
-g:检测文件是否设置了SGID位,如果是,则返回true
-k:检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true
-u:检测文件是否设置了SUID位,如果是,则返回true
-r:检测文件是否可读,如果是,则返回true
-w:检测文件是否可写
-x:检测文件是否可执行
-s:检测文件是否为空,文件大小不为0(内容长度不为0)为真
-e:检测文件(包括目录)是否存在,如果是,则返回true
-o:是or,左右条件任意一条成立
-a:是and,左右条件两者都要成立
!:取非

Shell脚本中常见的特殊字符的含义:

\b:Backspace
\c:显示后不换行
\f:在终端上屏幕的开始处显示
\n:表示换行
\r:回车
\t:制表符,也就是我们常说的tab键
\v:垂直制表符
\:反斜杠,转义符
‘‘:单引号,界定范围,可以取消范围内特殊字符的含义,例如:想要使转义符“\”成为普通的反斜杠,可以在命令中给转义符“\”外面套上单引号,单引号可以解决变量赋值空格的问题
“”:双引号,界定范围,不可以取消范围内特殊字符的含义,可以解决变量赋值空格的问题
``:反引号,相当于$(),将范围内命令输出的结果不受范围外命令的影响,输出的结果可以直接参与到范围外的命令的执行

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值