目录
下篇: Shell变量续篇-CSDN博客
一.基本定义变量
该如何定义变量呢?很简单,只需执行 变量名=变量值 命令即可,不过要遵守变量定义规则。
例如:
[root@localhost ~]# name="lzz 666"
当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号。 那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下:
[root@localhost ~]# echo $name lzz 666
变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。
那么变量定义的规范大致如下:
变量名不能以数字开头
等号左右两侧不能有空格
变量的值如果有空格,必须用引号包含,变量名和等号之间不能有空格
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
能使用bash里的关键字(可用help命令查看保留关键字)。
二.定义变量的三种方式区别
- 直接赋值:
variable=value
- 使用单引号:
variable='value'
- 使用双引号:
variable="value"
声明:
variable
是你要定义的变量名,而value
是你要赋给该变量的值。
- 如果
value
不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果value
包含了空白符,那么必须使用引号包围起来。- 使用单引号和使用双引号是有区别的。双引号内的特殊字符(如
$
、\
等)会被解析,而单引号内的内容会被原样保留。- 赋值号
=
的周围不能有空格,与其他编程语言不同。- 变量名由数字、字母、下划线组成,必须以字母或者下划线开头,不能使用 Shell 里的关键字(通过
help
命令可以查看保留关键字)。定义变量后,可以通过在变量名前加
$
符号来调用变量。例如,如果定义了变量A=hello
,那么可以使用echo $A
或echo ${A}
来调用并显示变量的值。
三.交互定义变量
使用read定义变量是一个经常用的定义方式,可以让脚本灵活和用户友好。这里罗列一些常用的参数与使用方式。
使用
read
命令:这是最基本的交互式定义变量的方法。通过read
命令后跟一个变量名来从用户那里获取输入,并将其存储在变量中。例如,read age
将会提示用户输入年龄,并将输入的值赋给变量age。[root@localhost ~]# read age #使用read定义一个变量age 23 #手动输入值23 [root@localhost ~]# echo $age #取age变量 23 #输出结果23
添加提示信息:为了使用户知道需要输入什么,可以使用
-p
选项来添加提示信息。例如,read -p "请输入你的年龄: " age 它
会在等待用户输入前显示"请输入你的年龄: "。[root@localhost ~]# read -p "请输入你的年龄: " age 请输入你的年龄: 23 [root@localhost ~]# echo $age 23
限制输入长度:如果想要限制用户输入的字符数,可以使用
-n
选项。例如,read -n 1 -p "请输入一个字符: " char 它
会让用户输入一个字符并存储在变量char中。[root@localhost ~]# read -n 1 -p "请输入一个字符: " char 请输入一个字符: f[root@localhost ~]# hjx #这里限制输入一个字符f 然后超出输入的字符就会出现在命令终端上被废弃
隐藏输入内容:在某些情况下,希望用户输入的内容不被显示出来,可以使用
-s
选项来实现这一点。例如,read -s -p "请输入密码: " passwd 这
会让用户输入密码,但输入的内容不会显示在屏幕上在登录mysql数据库中就是这样不显示密码。[root@localhost ~]# read -s -p "请输入密码: " passwd 请输入密码: [root@localhost ~]# echo $passwd 2578#$
设置超时时间:如果不想无限期地等待用户输入,可以使用
-t
选项来设置一个超时时间。例如,read -t 10 -p "请在10秒内输入: " ans 这
会在10秒后自动结束等待。[root@localhost ~]# read -t 10 -p "请在10秒内输入: " ans 请在10秒内输入: [root@localhost ~]# #10秒没输入就自动退出啦
使用环境变量:在Shell脚本中,还可以使用环境变量,这些变量通常以大写字母表示,如
$HOME
、$PATH
等。环境变量通常用于存储系统级别的配置信息。使用命令替换:使用命令的输出来定义变量,这称为命令替换。例如,time
=$(
date +%Y%m%d)会执行date
命令,并将其输出的格式化日期赋值给变量time。[root@localhost ~]# date 2024年 04月 19日 星期五 23:44:49 CST #替换前 [root@localhost ~]# time=$(date +%Y-%m-%d) [root@localhost ~]# echo $time 2024-04-19 #替换后的值
四.重复定义变量
直接赋值:
[root@localhost ~]# aa=1 [root@localhost ~]# echo $aa 1 [root@localhost ~]# [root@localhost ~]# aa=2 [root@localhost ~]# echo $aa 2
使用"$变量名 "新增内容 :
[root@localhost ~]# aa=123 [root@localhost ~]# echo $aa 123 [root@localhost ~]# aa="$aa"456 [root@localhost ~]# echo $aa 123456
使用${变量名}新增内容 :
[root@localhost ~]# aa=123 [root@localhost ~]# echo $aa 123 [root@localhost ~]# aa="$aa"456 [root@localhost ~]# echo $aa 123456 [root@localhost ~]# aa=${aa}789 [root@localhost ~]# echo $aa 123456789
五.查看变量
通过 echo 命令查询已经设定的变量的值,这种查询是已知变量名查询变量值。
但是如果我不知道变量名,那么需要使用set命令查询系统中已经存在的变量。
set
是一个用于设置或显示环境变量的命令,在Linux系统中,set
命令可以列出当前shell的所有变量,包括环境变量和局部变量。这些变量定义了shell的行为和特性,例如路径、语言、终端类型等。例如,可以使用以下命令将名为
MY_VARIABLE
的环境变量设置为字符串hello
set MY_VARIABLE=hello world
以下命令将清除所有已定义的变量:
set --
env
是一个用于显示和定义系统环境变量的命令,同时也可以用来在新环境中执行指令。
六.变量删除 unset 变量名
[root@localhost ~]# aa=123 [root@localhost ~]# echo $aa 123 [root@localhost ~]# unset aa [root@localhost ~]# echo $aa #输出内容为空 [root@localhost ~]#
下篇: Shell变量续篇-CSDN博客