美文网首页linux
从零开始学习Linux(三十六):Shell基础之变量

从零开始学习Linux(三十六):Shell基础之变量

作者: 通靈鹿小六 | 来源:发表于2020-12-27 07:30 被阅读0次

    1、变量

    1.1、什么是变量

    变量是计算机内存中的单元,其中存放的值是可以改变。
    当shell脚本需要保存一些信息时,如一个文件名或是一个数字,这时候就可以把信息存放在一个变量中。每个变量有一个名字,所以很容易通过名称引用它。

    1.2、变量定义规则
    • 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的;
    • 在bash中,变量的默认类型都是字符串型。如果要进行数值运算,则必需指定变量类型为数值型;
    • 变量用等号连接值,等号左右两侧不能有空格;
    • 变量的值如果有空格,需要使用单引号或双引号包括;
    • 在变量的值中,可以使用“\”转义符;
    • 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令;
    • 环境变量名建议大写,便于区分;
    1.3、变量分类
    • 用户自定义变量(也可以叫本地变量);
    • 环境变量:主要保存的是和系统操作环境相关的数据;
    • 位置参数变量:主要是用来向脚本中传递数据的,变量名不能自定义,变量作用是固定的;
    • 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的;

    2、用户自定义变量

    2.1、定义变量

    定义变量name和age,如下图所示:

    2.2、调用变量

    使用 $变量名 的方式调用变量。

    执行下面命令:

    echo '我是'\$name',我今年'$age'岁'
    
    2.3、查看变量

    使用set命令,查看变量。
    但是set命令返回结果有点多,看的时候要耐心一点。

    或者是结合管道符和grep命令,搜索变量名称name。

    set | grep name
    

    返回结果如下图所示:

    2.4、删除变量

    命令格式:unset 变量名;
    定义变量myname,myname=通靈鹿小六;
    删除变量myname,unset myname;

    整个过程如下图所示:

    3、环境变量

    用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

    3.1、定义环境变量

    命令格式: export 变量名=变量值;

    3.2、查看环境变量

    执行命令:env;

    环境变量定义名称都是大写的,查看结果如下图所示:

    3.3、调用环境变量

    同用户自定义变量一样,通过$变量名的方式调用。

    3.4、删除环境变量

    同用户自定义变量一样,unset 变量名;

    3.5、系统常见环境变量
    • PATH:系统查找命令的路径(这便是执行系统命令不用输入命令绝对路径的原因,系统会在PATH定义的所有路径中查询是否有输入的命令,找到命令后就直接执行);

    4、位置参数变量

    位置参数变量 作用
    $n n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要用大括号包含,如${10};
    $* 代表命令行中所有的参数,$*把所有的参数看成一个整体;
    $@ 代表命令行中所有的参数,不过$@把每个参数区分对待;
    $# 代表命令行中所有参数的个数;
    4.1、$n示例

    (1)创建add.sh文件,编辑脚本内容:

    #!/bin/bash
    num1=$1
    num2=$2
    sum=$(($num1+$num2))
    echo $num1 '+' $num2 '=' $sum
    

    (2)给文件add.sh赋予执行权限

    chmod 755 add.sh
    

    (3)执行add.sh脚本文件

    ./add.sh 4 9
    

    整个过程如下图所示:


    通过这个例子,可以看到将4赋予了$1,将9赋予了$2。

    4.2、$*、$@、$#示例

    (1)创建param1.sh文件,编辑脚本内容:

    #!/bin/bash
    echo "总共有 $# 个参数" #使用$#代表所有参数的个数
    echo "参数是: $*" #使用$*代表所有的参数
    echo "参数是: $@" #使用$@也代表所有参数
    

    (2)给文件param1.sh赋予执行权限

    chmod 755 param1.sh
    

    (3)执行param1.sh脚本文件

    ./param1.sh 111 222 333
    

    整个执行过程如下图所示:

    4.3、$*和$@区别示例

    (1)创建param2.sh文件,编辑脚本内容:

    #!/bin/bash
    echo '这是$*的输出内容'
    for i in "$*"   #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
    do
            echo "参数是: $i"
    done
    
    echo '这是$#的输出内容'
    x=1
    for j in "$@"   #$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几>次
    do
            echo "参数是: $x is: $j"
            x=$(( $x+1 ))
    done
    

    (2)给文件param2.sh赋予执行权限

    chmod 755 param2.sh
    

    (3)执行param2.sh脚本文件

    ./param2.sh 111 222 333
    

    整个执行过程如下图所示:

    5、预定义变量

    预定义变量 作用
    $? 最后一次执行命令的返回状态。如果变量值为0,证明上一个命令正确执行;如果变量值为非0(具体返回值,由命令自己来决定),则证明上一个命令执行错误;
    $$ 当前进程的进程号(PID);
    $! 后台运行的最后一个进程的进程号(PID);
    5.1、接收键盘输入

    命令格式:read [选项] [变量名];
    选项说明:

    • -p “提示信息”:在等待read输入时,输出提示信息;
    • -t 秒数:read命令会一直等待用户输入,使用 此选项可以指定等待时间;
    • -n 字符数:read命令只接受指定的字符数,就会执行;
    • -s: 隐藏输入的数据,适用于机密信息的输入;

    (1)创建param3.sh文件,编辑脚本内容:

    #!/bin/bash
    #作者:通靈鹿小六
    read -t 30 -p '请输入你的名字:' name
    
    read -t 30 -p '请输入你的年龄:' age
    
    read -n 1 -t 30 -p "请选择你的性别[M/F]:" gender
    
    echo -e "\n"
    echo "你叫$name,你的年龄是$age岁,你的性别是$gender!"
    

    (2)给文件param3.sh赋予执行权限

    chmod 755 param3.sh
    

    (3)执行param3.sh脚本文件

    ./param3.sh
    

    整个执行过程如下图所示:

    相关文章

      网友评论

        本文标题:从零开始学习Linux(三十六):Shell基础之变量

        本文链接:https://www.haomeiwen.com/subject/hauknktx.html