Shell变量
目标
1. 掌握shell变量的分类
1. shell变量
1.1 什么是变量
说明:把指定字符串或计算结果赋值给一个名称,引用该名称可以获取到对应的字符串或值,字符串或值可根据需求
发生变化,而引用名称不变;(引用名称:就是我们所说的变量)
1.2 什么是shell变量
说明:在shell脚本中的引用变量;如果变量为自定义,那么自定义变量需要符合shell变量命名规范;
思考:
在shell脚本中自定义变量时有哪些规范?
1.3 shell变量规范
1. 变量名以英文字母或者下划线开头,但是不能以数字开头
(name="xiaoming" 正确;_age=18 正确;1a="error" 错误;)
2. 变量名区分大小写
(如:name="zhangsan"与NAME="李四"不同)
3. 变量名与等号之间,等号与变量值之间不要有空格
(如: name="zhangsan")
4. 使用$加变量名来使用变量的值
(如:echo $name)
5. 引用变量名与字符串相连时,需要添加空格做分隔,或者变量名加{}修饰
(如:echo $name hello;echo ${name}hello;)
提示:以上为自定义变量名称和引用时的规范,除了自定义变量外shell脚本还有其他类型变量
2. shell变量类型
1. 本地变量【掌握】
2. 全局变量【了解】
3. 内置变量【熟悉】
2.1 什么是本地变量
说明:
1). 定义的变量只能在系统的局部环境下生效;作用范围小
2). 本地变量细分又分普通变量和命令变量
普通变量【掌握】
说明:用户自定义的变量,变量值一般为指定数据或者运算结果;变量的赋值有以下三种方式
1. 变量名=变量值 --> name=zhangsan
(变量值必须是一个整体,中间不能有空格;如:name=zhang san)
2. 变量名='变量值' --> name='zhang san'
(值全部为字符串)
3. 变量名="变量值" --> name="zhang san $age"(age为:变量名)
(值为字符串,如果值内有其他变量,则解析变量,并将变量值作为输出数据)
提示:
1). 变量值''和""区别:''不能解析其内变量,""可以解析其内变量
2). 变量值为数字,不加引号,其他默认推荐使用【""】
命令变量【掌握】
说明:用户自定义的变量,变量值为shell命令;变量的赋值有以下两种方式
1. 变量名=`命令` --> list='ls'
(``:为反引号 Tab键与Esc键中间波浪线键;输入法为英文状态下)
2. 变量名=$(命令) --> list=$(ls)
(执行括号内命令,将执行结果赋值给变量名)
提示:
1). ``移植性高;如果命令之间有层级关系,$()使用起来直观的点;
2). ``和$()各有优缺点,对于shell入门来说两种都一样,那种好记使用那种;
练习1
编写shell脚本,运行shell脚本后,显示当前路径下文件
思考
路径能不能动态输入?--> 在运行脚本的时候输入路径
read 命令
说明:获取键盘输入的内容赋给指定的变量
格式:
1). read 变量名
2). read 变量名 变量名
参数:
-p 添加提示信息 --> 如:read -p "请输入要统计的目录:" str
练习2
编写shell脚本,动态获取文件目录,返回该目录中文件的数量
练习2重点分析
1. 获取文件数量 ls-l |wc -l
(ls -l:以列表(行)的形式显示;|:管道符;wc -l:统计行数)
练习2 代码示例
#!/bin/bash
# 统计指定目录文件个数
read -p "请输入要统计的文件目录:" str
num=$(ls -l $str |wc -l)
num=$(($num-1))
echo "/etc目录下共有:${num}个文件"
2.2 全局变量【了解】
说明:全局变量又称环境变量,作用域可以为当前shell、当前用户、所有用户;可以通过命令来查看和设置全局变量;
1. 查看全局变量
env --> 查看系统已存在的全局变量
2. 定义全局变量
export 变量=值
提示:
1). 全局变量命名建议为大写
思考
练习2 通过read命令来动态获取参数,必须先执行脚本才能运行(bash script03.sh),
能不能在执行脚本的时候直接传入参数呢?(bash script03.sh /etc)
2.3 内置变量【熟悉】
说明:bash中特殊的变量(向脚本传递参数)
序号 | 变量 | 含义 |
---|---|---|
01 | $0 | 脚本名【掌握】 |
02 | $1-$9 | 参数位置1-9【掌握】 |
03 | $# | 位置参数的个数【掌握】 |
04 | "$*" | 所有位置参数(作为单个字符串)“$1 $2 $3" --> 传递了一个参数 |
05 | $? | 返回值【掌握】 0为执行成功 如:echo $? |
传参格式:
1). bash 脚本名 参数
2). bash 脚本名 参数 参数
调用格式:
1). $1-$9
2). $#
3. 变量查看方式
1. echo $变量名 如:echo $name 【了解】
2. echo "$变量名" 如:echo "$name" 【了解】
3. echo ${变量名} 如:echo ${name} 【掌握】
(被引用时使用,如:str="hello ${name}";外侧已有引号)
4. echo "${变量名}" 如:echo "${name}"【推荐】
提示:
两种格式4中写法,如果值内引用则无引号
4. 取消变量
对自定义的变量,如果不使用时要及时进行取消,释放系统资源
格式:
unset 变量名 --> unset name
(unset:内建shell命令,作用取消变量或函数;name:变量名称(无$) )
思考
如果把脚本运行结果或执行命令结果保存到指定文件中?
5. 小知识-扩展【重定向】
说明:把运行结果保存到指定的文件中,正确的执行命令使用数字1,错误的命令使用数字2
格式:
1) 命令 [脚本] 1>result.txt 或 命令 [脚本] 1>>result.txt
2) 命令 [脚本] 2>result.txt 或 命令 [脚本] 2>>result.txt
提示:
>: 覆盖-新的内容覆盖之前老的内容
>>:追加-在老的内容后面追加新的内容
总结
1. 变量规范
2. ''与""区别
3. 命令变量格式
4. read -p
5. 内置变量 $0、$#、$?、$*、$1-$9
6. 变量的查看方式
7. 取消变量
8. 重定向