03.Shell变量

一、变量定义、查看和取消

1.什么是变量
以固定名称存放的可能会变化的值
    	——提高脚本对任务需求、运行环境变化的适应能力
    	——在脚本执行中方便重复使用某个值
2.定义/赋值变量
基本格式
    	变量名=变量值
相关注意事项
    	若指定的变量名已存在,相当于为此变量重新赋值(修改)
    	等号两边不要有空格
    	变量名由字母/数字/下划线组成,区分大小写
    	变量名不能以数字开头,不要使用关键字和特殊字符
$ X=12
$ var1=CentOS
3.查看/引用变量
基本格式
    	引用变量值: $变量名
    	查看变量值: echo $变量名
               					    echo ${变量名}
$ echo $X
12
$ echo $var1
CentOS
$ echo $var16.5 //未定义的变量无取值
.5
$ echo ${var1}6.5   //变量名易混淆时,以{}界定
CentOS6.5
4.取消变量
自定义变量的失效
    	退出定义变量的Shell环境时,变量会自动失效的
    	在环境内也可手动取消:unset 变量名
$ unset X
$ echo $X

二、变量的种类

变量的分类角度

  • 存储类型

     整数型、浮点型、双精度浮点型、字符型、……
     Shell不作为高级编程语言,对存储类型的要求比较松散,故在此不作存储类型上的区分
    
  • 使用类型

类型说明
环境变量变量名通常大写,由系统维护,用来设置工作环境,其中只有个别变量用户可以直接更改
位置变量由bash内置,用来存储在执行脚本时提供的命令行参数
预定义变量由bash内置,一类有特殊用途的变量,可以直接调用,但不能直接赋值或修改
自定义变量由用户自主设置、修改及使用

环境变量

配置文件(不同操作系统配置文件名不一)
        /etc/profile        //所有用户都起作用
        ~/.bash_profile     //只对当前用户起作用
相关操作
        env 列出所有的环境变量
        set 列出所有变量
常见的环境变量
        PWD 查看当前用户所在文件夹
        PATH 存储用户在执行命令时默认到哪些文件夹下找命令程序
        USER 记录用户名称
        LOGNAME 登录名称
        UID 用户数字标识
        SHELL 保存当前用户对应的登录解释器路径
        HOME 保存用户所在家目录的路径
        PS1 决定命令行默认提示符 [\u@\h\W]\$ 当前用户名 主机名 工作目录
        PS2 第二级提示符

位置变量

在执行脚本时提供的命令行参数;表示为$n, n为序号
        $1、$2、…… ${10}、${11}、……

#!/bin/bash 
echo $1 ${10}   //查看第1、10个位置参数
    
如下:改造前,功能有限
        #!/bin/bash
        useradd love 2> /tmp/err.log 
        echo 123456 | passwd --stdin love &> /dev/null
如下:改造后,功能更灵活
        #!/bin/bash
        useradd $1 2> /tmp/err.log
        echo 123456 | passwd --stdin $1 &> /dev/null

预定义变量

用来保存脚本程序的执行信息
        直接使用这些变量
        不能直接为这些变量赋值
变量名含义
$0当前所在的进程或脚本名
$$当前运行进程的PID号
$?前一条命令执行后的返回状态值,0表示正常或成功,1或其他表示异常
$#已加载的位置变量的个数
$*所有位置变量的值
$!后台最后一个进程的PID号
e.g.
            # touch afile.txt
            # echo $?
            0       //前一条命令成功
            # touch adir/afile.txt
            touch:无法碰触 "adir/afile.txt":没有那个文件或目录
            # echo $?
            1       //前一条命令异常/失败

自定义变量

定义方法
        变量名=变量值
变量名的设置规则
        由数字/字母/下划线组成,区分大小写
        不能以数字开头
        等号两边不要有空格
        不要使用关键字和特殊字符
查看变量值
        echo $变量名
        注:$ : 通过指定变量名称引用变量值
撤销变量
        unset 变量名
查看变量定义
        set | grep 变量名

三、扩展赋值操作

1、注意区分三种定界符

    	双引号"":     允许扩展,通过$引用其他变量
    	单引号'':       禁用扩展,即便$也视为普通字符
    	反撇号``:    将命令的执行输出作为变量值
# echo "当前用户是:$USER"
当前用户是:root
# echo "当前用户是:$USER"
当前用户是:$USER
# echo 当前工作目录:$(pwd)
当前工作目录:/root
注:$()与``等效,但$()更方便嵌套使用

引号( 双引号与单引号)在赋值中的应用示例

1)双引号
             在双引号内允许$扩展,可调用其他变量的值
             出现特殊字符时,可采用\符号转义( 常见的转义字符:\n换行符 \t制表位 \\  \"  \#)
             当变量值不包括空格、制表符时,双引号通常被省略
$ A=CentOS7.6
$ B=$A
$ echo $B 
CentOS7.6
//有空格时,引号不可省略
$ B=$A Server   //未加引号时报错
-bash:Server:command not found
$ B="$A Server"
$ echo $B 
CentOS7.6 Server
$ A="a\tb\tc\nd\te"
$ echo -e $a    //添加-e选项解析特殊义符
$ FN="\\\""
$ touch /root/$FN.txt   //可以在命令行内嵌入变量的值
$ ls -lh \\\".txt
2)单引号
            所有字符均视为字符本身(无特殊含义)
            不允许\转义,有利于保留特殊字符
$  A=CentOS7.6
$  B='$A Server' //$被视为普通字符
$  echo $B       //确认赋值结果
$A Server

2.从标准输入赋值

read从键盘录入数据完成赋值
    read取值的用法
    基本格式
        read 变量名 ... ...
        read [-p "提示信息"] 变量名 .. .. (-p方便添加自定义交互,-t可指定超时秒数)
    
        # read -p "svr5 login:" YOUR_NAME   //模拟登录取用户名
        svr5 login: Jerry
        # echo $YOUR_NAME                   //查看取值结果
        Jerry
    静默取值
    启动read命令的-s选项
        关闭输入回显(从键盘录入信息时,不显示在屏幕上)
        适合读入敏感信息,提高安全性
        
        # read -s -p "Password:" YOUR_PASS  //模拟登录取密码
        # echo $YOUR_PASS                   //查看取值结果
        
        read取值示例
            提示用户输入要备份的文件夹路径
            使用tar命令备份该文件夹,存放到/opt/目录下
        # cat /root/dirbak.sh     //确认脚本内容
        #!/bin/bash
        read -p "请指定要备份的目录位置:" SDIR
        tar zcpPf /opt/dirbak.tgz $SDIR

3.变量的作用范围

局部变量
    只在定义此变量的当前Shell环境下有效
    自定义变量默认都是局部变量
    无法在子Shell环境中使用
全局变量
    在当前Shell及所有的子Shell环境下都有效
    子Shell中若赋值同名变量,与父Shell中的变量无关
    使用export可将局部变量声明为全局变量

发布全局变量
    export 局部变量名[=变量值] .. ..
        直接定义/赋值指定的变量,作为全局变量发布
        对已有的局部变量,只需发布不需赋值
# X=123             //定义局部变量X
# export Y=456      //定义全局变量Y
# bash              //进入新开启的子Shell环境
# echo $X,$Y        //查看变量X、Y的值
,456                
# exit              //返回原有Shell环境
exit
# echo $X,$Y        //查看变量X、Y的值
123,456

取消全局变量
    export -n 全局变量名 .. ..
        取消变量的全局属性
        此操作对局部变量无实际意义
# export -n Y       //将全局变量Y改为局部变量
# bash              //进入新开启的子Shell环境
# echo $Y           //在子Shell中Y为未定义的变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值