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命令实现格式化输出,其作用是打印输出格式化字符串。

  • 相关阅读:
    String、StringBuilder、StringBuffer的比较
    applet、servlet、jsp分别是什么
    getWriter() has already been called for this response 的解决办法
    servlet 的作用
    什么是 servlet?
    jsp的Session 和Servlet的Session的区别
    java——复用代码、组合、继承(java编程思想)
    Java----访问权限
    CountDownLatch源码分析
    Redis底层数据结构之 zset
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975576.html
Copyright © 2011-2022 走看看