zoukankan      html  css  js  c++  java
  • 【Shell】Shell变量及相关操作

    目录

    1 实验环境

    2 Shell变量类型

    2.1 Shell环境变量

    2.3 预定义特殊变量

    2.4 用户自定义的变量

    3 变量的操作

    3.1 创建和设置变量

    3.2 区分变量名

    3.3 删除变量

    3.4 变量赋值

    3.4.1 直接给变量赋值

    3.4.2 使用read命令赋值

    3.4.3 命令行参数赋值

    3.4.4 命令的输出结果赋值

    3.4.5 文件读入数据实现赋值

    3.5 变量的输出


    变量(variable),顾名思义,是指在程序执行过程中其值可以改变的量。变量是计算机内存中被命名的存储位置,其中存放数字或字符串等数据,本篇将对Linux环境下Shell变量做个总结。

    1 实验环境

    • Oracle Linux 6.7

    2 Shell变量类型

    Shell中的变量分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量,每种变量都有其特殊的功能。

    2.1 Shell环境变量

    Shell环境变量是一类Shell预定义变量,用于设置系统运行环境的变量,由系统统一命名,部分环境变量的值由系统设定,部分可由用户设定。

    环境变量的名称由大写字母组成,常用的Shell环境变量如下:

    1)HOME:用户主目录,一般为/home/用户名。不带参数的cd默认进入HOME指定的目录,即cd与 cd $HOME等价。

    [oracle@strong ~]$ echo $HOME

    /home/oracle

    [oracle@strong ~]$ cd /u01/

    [oracle@strong u01]$ pwd

    /u01

    [oracle@strong u01]$ cd $HOME

    [oracle@strong ~]$ pwd

    /home/oracle

    2)PATH:定义了一些目录路径,路径由冒号分隔,在执行命令或Shell脚本时,Shell会按PATH变量中设定的顺序搜索这些目录,找到的第一个匹配的命令或Shell脚本将被执行。

    [oracle@strong ~]$ echo $PATH

    /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin:/u01/app/oracle/product/12.1.0/dbhome_1/bin

    3)TERM:终端类型。

    [oracle@strong ~]$ echo $TERM

    xterm

    4)PWD:当前工作目录的绝对路径,该变量的取值随cd的使用而改变。

    [oracle@strong ~]$ echo $PWD

    /home/oracle

    5)PS1:主提示符,对于根用户,默认为#,普通用户为$,可以对该值进行设置。

    [oracle@strong ~]$ echo $PS1

    [u@h W]$

    6)PS2:辅助提示符,在Shell接收用户输入命令过程中,如果用户在输入行的末尾输入然后回车,或shell判断用户虽然按回车键,但输入命令未结束时,将显示辅助提示符,默认为>。

    [oracle@strong ~]$ echo $PS2

    >

    [oracle@strong ~]$ echo 'Hello,

    > world'

    Hello,

    world

    7)SHELL:定义shell的解释路径。

    [oracle@strong ~]$ echo $SHELL

    /bin/bash

    8)MAIL:定义系统邮箱路径。

    [oracle@strong ~]$ echo $MAIL

    /var/spool/mail/oracle

    9)LOGNAME:登录的用户名。

    [oracle@strong ~]$ echo $LOGNAME

    oracle

    10)UID:当前用户的UID。

    [oracle@strong ~]$ echo $UID

    500

    2.2 位置变量

    位置变量是依据出现在命令行上参数的位置来确定的变量,在调用shell程序的命令中,参数的位置定义如下:

    $命令 参数1 参数2 参数3 ...

    当shell解释一个命令时,会将位置与命令行中的每一个参数关联,依次是:

    • $0:对应当前执行的命令名(或shell程序的文件名);
    • $1:对应第1个位置参数;
    • $2:对应第2个位置参数;
    • $3:对应第3个位置参数;
    • .......
    • $9:对应第9个位置参数。

    当命令行的参数超过9个时,需要使用shift命令移动位置参数,每执行一次shift命令,变量0不变,从1开始位置参数左移一位。

    [oracle@strong ~]$ cat test

    #!/bin/bash

    echo "--------------循环开始---------------"

    while [ $# -gt 0 ]

    do

    echo "当前的位置参数为:$*"

    shift

    done

    echo "------------循环结束----------------"

    [oracle@strong ~]$ chmod u+x test

    [oracle@strong ~]$ ./test 11 22 33 44 55 66 77

    --------------循环开始---------------

    当前的位置参数为:11 22 33 44 55 66 77

    当前的位置参数为:22 33 44 55 66 77

    当前的位置参数为:33 44 55 66 77

    当前的位置参数为:44 55 66 77

    当前的位置参数为:55 66 77

    当前的位置参数为:66 77

    当前的位置参数为:77

    ------------循环结束----------------

    2.3 预定义特殊变量

    预定义的特殊变量和环境变量类似,由shell根据实际情况来设置,所不同的是,该类变量具有特殊含义,不能由用户重新设置,所有的预定义特殊变量都有$符号与另一个符合组成,常用的如下:

    • $#:实际位置参数个数;
    • $*:命令行中的所有位置参数组成的字符串;
    • $!:上一个后台命令对应的进程号;
    • $?:表示最近一条命令执行后的退出状态,一般命令执行成功返回0;
    • $$:当前进程PID;

    示例1:

    [oracle@strong ~]$ cat para

    echo "参数个数:$#"

    echo "参数:$*"

    echo "前三个参数:$1,$2,$3"

    echo "第四个参数:$4"

    [oracle@strong ~]$ sh para A B C D

    参数个数:4

    参数:A B C D

    前三个参数:A,B,C

    第四个参数:D

    示例2:

    [oracle@strong ~]$ cat para_test

    #!/bin/bash

    if [ $# -eq 1 ]

    then

    DIR=$1

    FILE=`basename $0`

    DIR2=`basename $1`

    if [ -x $DIR ]

    then

    tar zcvf ${FILE}${DIR2}.tar.gz $DIR

    else

    echo "$DIR is not exits."

    fi

    else

    echo "Please ecter an argu."

    fi

    2.4 用户自定义的变量

    用户可以根据需要自定义变量,变量区分大小写,建议所有的变量名用大写字母表示。

    3 变量的操作

    shell变量的基本操作包含变量的创建、删除等。

    3.1 创建和设置变量

    有两个内置命令可以创建变量,分别为declare和typeset,除了上述方式之外,还可以通过直接赋值给变量名进行变量的创建,为变量赋值时,变量名前不应加$,格式如下:

    变量名=变量值

    其中,等号前后不可有空格,变量的使用需要在变量名前加$。

    示例:

    [oracle@strong ~]$ NAME=alen

    [oracle@strong ~]$ echo $NAME

    alen

    [oracle@strong ~]$

    [oracle@strong ~]$ NAME="Hello,Alen"

    [oracle@strong ~]$ echo $NAME

    Hello,Alen

    3.2 区分变量名

    有时变量名会与其它字符一起使用,由此很容易混淆,例如:

    [oracle@strong ~]$ order=10

    [oracle@strong ~]$ echo "Tom is $orderth."

    Tom is .

    可以看到,输出结果部署Tome is 10th,而仅仅是Tome is 。因为shell会将orderth变量进行搜索,可以使用大括号来区别变量与其它字符,例如:

    [oracle@strong ~]$ order=10

    [oracle@strong ~]$ echo Tome is ${order}th.""

    Tome is 10th.

    3.3 删除变量

    删除变量使用unset,如果变量未被设置成只读,则用户自定义变量和环境变量都可以通过unset进行删除。

    [oracle@strong ~]$ echo $order

    10

    [oracle@strong ~]$ unset order

    [oracle@strong ~]$ echo $order

    [oracle@strong ~]$

    3.4 变量赋值

    shell中变量值的输入有多种方法,如直接赋值、通过read赋值、使用命令行参数赋值和利用命令的输出结果赋值等。

    3.4.1 直接给变量赋值

    shell中,在定义变量的同时可以直接给变量赋值,为变量赋值,变量名前不加$,且等号前后不可有空格。

    [oracle@strong ~]$ cat resum

    #!/bin/bash

    NAME=Alen

    GENDER=male

    AGE=30

    TEL=0755

    echo "---------Resum-----------"

    echo "name:${NAME}"

    echo "age:${AGE}"

    echo "gender:$GENDER"

    echo "tel:$TEL"

    echo "-------------------------"

    [oracle@strong ~]$ chmod u+x resum

    [oracle@strong ~]$ ./resum

    ---------Resum-----------

    name:Alen

    age:30

    gender:male

    tel:0755

    -------------------------

    3.4.2 使用read命令赋值

    read是一个内置命令,可以从标准输入设备或从一个文件读取数据,read读取一个输入行直到遇到一个换行符为止,当读取时,行末尾的换行符被转换为一个空字符,read命令语法格式:

    read 变量1 变量2......

    [oracle@strong ~]$ cat read

    #!/bin/bash

    echo -n "请输入你的名字:"

    read user

    echo "您输入的名字为:${user}"

    [oracle@strong ~]$ chmod u+x read

    [oracle@strong ~]$ ./read

    请输入你的名字:Alen

    您输入的名字为:Alen

    3.4.3 命令行参数赋值

    shell提供了位置变量,因此用户可以通过使用命令行参数对位置变量赋值。

    [oracle@strong ~]$ sh para AA BB CC DD

    参数个数:4

    参数:AA BB CC DD

    前三个参数:AA,BB,CC

    第四个参数:DD

    3.4.4 命令的输出结果赋值

    shell程序中,可以将一个可执行命令的执行结果赋值给一个变量,需要使用反引号``。

    [oracle@strong ~]$ cat date

    #!/bin/bash

    date=`date +'%F %T'`

    echo "当前时间是:$date"

    [oracle@strong ~]$ chmod u+x date

    [oracle@strong ~]$ ./date

    当前时间是:2019-11-17 19:15:00

    3.4.5 文件读入数据实现赋值

    shell中,也可以从一个指定的文件读入数据并赋值给变量,为了方便处理数据,通常通过while循环一行行读入数据,即每循环一次将文件中的一行读入变量,直到读取到文件的结尾。

    [oracle@strong ~]$ cat readfile

    #!/bin/bash

    ls -l > file

    while read LINE

    do

    echo $LINE

    done<file

    [oracle@strong ~]$ ./readfile

    3.5 变量的输出

    输出变量最简单的方法是使用echo命令,此外,可以使用printf命令实现格式化输出,其作用是打印输出格式化字符串。

  • 相关阅读:
    Springboot 之 自定义配置文件及读取配置文件
    SQLSERVER系统视图 sql server系统表详细说明
    MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
    使用Ecplise git commit时出现"There are no stages files"
    maven添加sqlserver的jdbc驱动包
    java将XML文档转换成json格式数据
    java将XML文档转换成json格式数据
    cannot be resolved. It is indirectly referenced from required .class files
    org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
    @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975576.html
Copyright © 2011-2022 走看看