shell-变量

bash中变量的种类

根据变量的生效范围等标准:
    本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

    环境变量:生效范围为当前shell进程及其子进程

    局部变量:生效范围为当前shell进程中某代码片断(通常指函数)

    位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

        注:脚本运行是在当前shell的子shell下运行的,如有(command)括号中的再开一个子shell,脚本shell之下开启的子shell,不可以调用的其他脚本的本地变量

    特殊变量:$?, $0, $*, $@, $#

本地变量

变量赋值:name=‘value’,

可以使用引用value:
    (1) 可以是直接字串; name=“root"
            name=var
            name=“xxx xxx  xx”多个字符串中间有空格的需要用引号如果不引用其他变量或引用命令的话单双引号都可以。
    (2) 变量引用:
        $name, ${name} 
                $a
                $b
                $ab
                ${a}b

        name="$USER" 通过引用起它变量的值赋值
    (3) 命令引用:name=`COMMAND`, name=$(COMMAND)

            注:可以多行内容赋值到一个变量。

变量引用:${name}, $name
    "":弱引用,其中的变量引用会被替换为变量值
    '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串

            "弱引用----双引号
            [root@localhost ~]# echo "echo $USER"
            echo root

            ''强引用------单引号
            [root@localhost ~]# echo 'ehco $USER'
            ehco $USER

            ``命令引用----~下的符号
            [root@localhost ~]# echo `echo $USER`
            Root

显示已定义的所有变量:set

删除变量:unset name 脚本运行完毕要释放变量。养成良好习惯。

环境变量

环境变量的使用必须先声明
变量声明、赋值:
    export name=VALUE
    declare -x name=VALUE

    declare - name=number 声明变量为数值型
变量引用:$name, ${name}

显示所有环境变量:
    export
    env
    printenv

删除:unset name

bash有许多内建的环境变量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

    声明环境变量后,shell的子进程及其子进程的子进程都可使用。
    新的终端后就不可以使用。

注
source 脚本 和 . 脚本 执行脚本效果是一样的,都是在当前shell下执行。
当前shell下的用户可调用该脚本的本地变量

通过 bash 脚本和直接执行 ./脚本 效果是一样的,都是在当前shell下开启子shell后运行的。
当前shell不可以调用该脚本定义的本地变量。

只读和位置变量

只读变量:只能声时,但不能修改和删除,不能使用unset撤销。
    readonlyname=VLAUE
    declare -r name=VLAUE

        可以与-x一起使用 declare -rx name=VALUE 只读的环境变量

位置变量:在脚本代码中调用通过命令行传递给脚本的参数
    $1, $2, ...:对应第1、第2等参数,shift [n]换位置
    $0: 命令本身,脚本名称。
    $*: 传递给脚本的所有参数,全部参数合为一个字符串
    $@: 传递给脚本的所有参数,每个参数为独立字符串
    $#: 传递给脚本的参数的个数
        $@ $* 只在被双引号包起来的时候才会有差异

            [root@yangyouwei ~]# ./test1.sh a b
            first a b
            secd 
            all a b
            ========
            first a
            secd b
            all a b

            [root@yangyouwei ~]# cat test1.sh 
            #!/bin/bash
            ./test2.sh "$*"
            echo ========
            ./test2.sh "$@"

            [root@yangyouwei ~]# cat test2.sh 
            #!/bin/bash
            echo first "$1"
            echo secd "$2"
            echo all "$*"

shift

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。

脚本test1加上参数a和b 调用脚本test2
    test1中
            test2运行两次但是调用的 参数不同
            (虽然某些情况下$*和$@效果是一样的,在这里这两个变量的值作为test2的参数,参与test2的执行。)

示例:判断给出的文件的行数

    linecount="$(wc-l $1| cut -d' ' -f1)"
    echo "$1 has $linecountlines."

declare

-i 声明为整数

-a 声明为数组

-f 声明为函数

-r 声明为只读

local 局部变量

定义局部变量
多用于函数内部的变量定义。定义后该变量只在该函数体内部生效。

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/38465

(0)
yywyyw
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • haproxy 简单实现80转后端8000

    一,安装 yum -y install gcc automake autoconf libtool make tar -xzf haproxy-1.6.8 cd haproxy-1.6.8 make TARGET=linux2628 make install 二,编辑配置文件 Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配…

    Linux干货 2016-09-19
  • 编译安装httpd

                   1 将 httpd-2.4.25.tar.bz2下载 到  centos7的 /app目录下                 [root@localh…

    Linux干货 2017-04-24
  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24
  • 初入Linux世界 —马哥教育网络班N22_第二周课程练习

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。        Linux上的文件管理有三个:cp, mv, rm     1、cp命令:copy             源文件;目标文件;   &nb…

    Linux干货 2016-08-22
  • linux中更改文件权限的实验

      三种基本权限    r 读 数值表示为4 w写 数值表示为2 X 可执行数值表示为1              简单举例: -rw-rw-r–共十个字符,分成四段 第一个字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录 第…

    2017-07-15