Shell脚本中的变量read
一. 变量
1. 变量概述
- 变量即在程序运行过程中它的值是允许改变的量。
- 变量是用一串固定的字符串去表示不固定的内容。
- 变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。
变量的作用:
用来存放系统和用户需要使用的特定参数(值)。
- 变量名:使用固定的名称,由系统预设或用户定义。
- 变量值:能够根据用户设置、系统环境的变化而变化。
2. 变量类型
变量赋值: 变量名=变量值(name=value)
bash变量类型:
1、根据变量的生效范围可分为:
-
环境变量(全局变量):全局生效,在任何bash环境中都可以识别。
-
局部变量:生效范围为当前shell进程。对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。
-
本地变量:生效范围为当前shell进程中某代码片断,通常指函数。 只能在定义它们的函数/脚本内部中使用。
2、根据是否由系统定义可分为:
- 内置变量:由系统维护,用于设置工作环境。如PS1,PATH,HISTSIZE, HOSTNAME,USER。
- 自定义变量:由用户自己定义、修改和使用。
3、特殊变量:
-
环境变量(全局变量):全局生效,在任何bash环境中都可以识别。:
-
只读变量:read only, 只可以读取不可以更改 。
-
位置变量: 通过命令行给脚本传递参数 。n(n是正整数),n(n是正整数),n(n是正整数),{10} 要加花括号。
-
预定义变量:用来保持脚本程序的执行信息。
- $0 :当前脚本名称(如果是软链接,显示当前软链接文件名)。 - $? :查看上一次命令的执行状态,返回0为正常,非0为错误。 - $* :返回所有参数,当整体返回。 - $@ :返回所有参数,当个体返回。 - $# :获取当前shell命令行中参数的总个数id - $! :在此之前执行的命令或脚本的最后一个参数id - `$$` :获取当前进程的PID。
3. 变量的命名要求
-
区分大小写
-
不能使程序中的保留字和内置变量名称:如:if, for,hostname。
-
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反。
-
使用英文时,尽量使用词义通俗易懂,如PATH。
-
大驼峰 StudentFirstName
-
小驼峰 studentFirstName
-
下划线 student_name
变量名=变量值
name=yhy
echo $yhy
4.变量作用范围
-
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
-
可以通过内部命令export将指定的变量为全局变量(即环境变量),使用户定义的变量在所有子shell环境中可以继续使用。
方法:
- 格式1:export 变量名
- 格式2:export 变量名=变量值
可以使用pstree 查看shell的环境
输入bash进入子shell
ctrl+D组合exit 退出子shell

5." ",' ',反撇
,{} 符号的作用
符号 | 作用 |
---|---|
" " | 显示调用变量 |
'' | 不显示变量 |
`` | 调用命令 =$() |
{} | g隔绝变量 |
**5.1 示例 **
5.1.1(" ")(' ')
1.当引号内只表示字符串时,使用双引号或单引号都可以。
2.使用单引号或双引号时,引号内的内容会被当做一个整体。
3.双引号可以通过$符号引用变量值,单引号禁止引用变量值,单引号内的内容都被认为是普通字符。
5.2.1(
)反撇
1.(
)反撇=$( )
2.当存在嵌套时,不能使用反撇
展开命令行
展开命令执行顺序:
- 把命令行拆分成单个命令词
- 展开别名
- 展开花括号的声明 {}
- 展开波浪符声明 ~
- 命令替换 $()和``
- 再次把命令行拆分成命令词
- 展开文件通配符*、?、[abc]等待
- 准备I/O重定向 < 和 >
- 运行命令
二.局部变量
定义变量: 变量名=变量值
引用变量: $变量名
或 ${变量名}

查看变量:
- echo $变量名:查看单个变量
- set:查看所有变量,包括局部变量和环境变量
取消变量: unset 变量名
作用范围: 仅在当前shell环境中有效,无法在子shell环境中使用。
三.环境变量
1.系统内置环境变量
-
- 由系统提前创建,用来设置用户的工作环境
-
- 可以使用env查看环境变量
-
- 需要记住的常用环境变量
符号 | 意义 |
---|---|
$USER | 用户名称 |
$HOME | 用户的宿主目录 |
$LANG | 语言和字符集 |
$PWD | 表示当前所在工作目录 |
$PATH | 可执行用户程序的默认路径 |
2环境变量的配置文件
/etc/profile
四.只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启
五.位置变量
位置变量也称为位置参数
标题 | |
---|---|
echo "$1" | 位置1 |
echo "$2" | 位置2 |
echo "${10}" | 位置10 |
echo "$10" | 位置1和0 |
两位数需要加花括号{},不然$10
会被识别为:$1
和0 。
六.预定义变量
符号 | 作用 |
---|---|
$* | 返回所有变量,整体返回 |
$@ | 返回所有变量,单个返回 |
$? | 上一次命令执行返回状态,=0则正确 ;非0则错误 |
$0 | 脚本名称 |
$! | 后台任务最后一个id |
$$ | 获取当前进程pid |
示例:
2)测试 $0
、$$
、$#
、$@
的作用。
七.read -p
从键盘输入内容为变量赋值
格式: read 变量名
常用选项:
- -p:后面跟提示信息,即在输入前打印提示信息。
- -s:安静模式,在输入字符时不再屏幕上显示,例如密码。
- -t:后面跟秒数,定义输入字符的等待时间。
- -n:后跟一个数字,定义输入文本的长度。
- -a:后跟一个变量,该变量会被认为是个数组。
方法一:
[root@localhost opt]# read -p "现在的时间是" time
现在的时间是9点
echo $time
方法二:
[root@localhost opt]# vim 1.sh
#!/bin/bash
echo -n "请输入你的信息"
read info
echo $info
[root@localhost opt]# bash 1.sh
方法三:
[root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
是否覆盖当前文件 (yes/no)yes
八.四个配置文件的作用
1、/etc/profile 文件
系统级的配置文件,开机时系统自动加载该文件中的配置。
系统每次启动都会自动执行/etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)
~/.bash_ profile 文件
不同用户登录系统时,会自动执行自己家目录中的~/ .bash_ profile 文件中的命令,之后自动执行~/ . bashrc。(因为~/ .bash_ profile文件中规定了,如果~/ . bashrc是个文件,则执行该文件)。
~/.bashrc 文件
当前用户每切换一个shell环境都会自动加载~/ . bashrc 文件中的配置 ,之后自动执行/etc/bashrc文件。(因为~/ . bashrc文件中规定了,如果/etc/bashrc是个文件,则执行该文件)。
4、/etc/bashrc 文件
/etc/bashrc针对所有用户,用户每切换一个shell环境都会自动执行。
九.重点总结
1、全局变量和局部变量:
- 环境变量(全局变量):在当前shell环境和子shell环境(包括孙子shell环境)中都生效。
- 局部变量:只在当前shell环境中生效,子shell环境中无效。
2、设置、查看和删除变量的命令:
-
变量赋值:
- 方法1:变量名=变量值(name=value)
- 方法2:read 变量名, 之后从键盘输入中获取变量名的值
-
设置环境变量:export name=value 或 export name
-
设置只读变量:readonly name 。只读变量不可删除或重新赋值。
-
查看变量和变量值:
- env:查看所有环境变量。
- set:查看所有变量,包括局部变量和环境变量。
-
删除变量:unset name
3.read -p
- -p:后面跟提示信息,即在输入前打印提示信息。
- -s:安静模式,在输入字符时不再屏幕上显示,例如密码。
- -t:后面跟秒数,定义输入字符的等待时间。
- -n:后跟一个数字,定义输入文本的长度。
- -a:后跟一个变量,该变量会被认为是个数组。
4.预定义变量
变量 | 作用 |
---|---|
$? | 表示前一条命令执行后的返回状态。返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常。 |
$* | 表示所有位置参数的内容。当整体返回。(将输入的参数作为一个单词1,2,3) |
$@ | 表示所有位置参数的内容。当个体返回。可作为数组。(将参数内容分割成n份,每份作为独立个体)1;打印第一个 |
$# | 表示命令行中位置参数的总个数。 |
$0 | 表示当前脚本名称(如果是软链接,显示当前软链接文件名)。 |
$_ | 表示在此之前执行的命令或脚本的最后一个参数。 |
$$ | 获取当前进程的PID。 |
5.几个符号的作用
符号 | 作用 |
---|---|
" " | 显示调用变量 |
'' | 不显示变量 |
`` | 调用命令 =$() |
{} | g隔绝变量 |
转载自:https://juejin.cn/post/7267554771538608165