Shell变量

 

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. 重定向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值