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 20:45
下一篇 2016-08-21 20:45

相关推荐

  • 十二.Linux博客-2016年8月16日文件查找和压缩、rpm包管理、while循环、until循环

    格式说明: 操作 概念 命令 说明及举例 十二.文件查找和压缩、rpm包管理、yum、while循环、until循环 tar tar -zcvf /testdir/etc.tar.gz /etc/ 备份etc创建etc.tar.gz文件 压缩为gz格式 显示过程 tar -jcvf&nbs…

    Linux干货 2016-08-24
  • N23-卡卡琦-第二周

    1、文件管理类命令 常规命令:copy、mv、rm (1).copy 文件复制 用法: 注意:复制文件只是复制文件的数据而不是元数据,但是可以保留元数据的信息。 单源复制:目录是否存在都可以 多源复制:目录必须是存在的 -i:提醒用户操作确认(交互式) -f:强行覆盖 -r:递归复制目录 -p:保留源数据 -a:用于实现归档,做备份 -d:不跟踪符号链接所指…

    Linux干货 2016-12-11
  • 网络接口配置–Bonding

    网络接口配置–Bonding Bonding        就是讲到快网卡绑定到同一IP地址对外服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡被修改为同一MAC地址。 一 Bonding …

    Linux干货 2017-05-07
  • DNS服务器—-主从服务器搭建

    一、环境准备   1、准备三台测试       主DNS服务器地址:192.168.10.203       从DNS服务器地址:192.168.10.103       测试主机地址:  192.168.10.120 …

    Linux干货 2015-05-18
  • 第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell; 答:#egrp ‘^(root|fedora|user1)’ /etc/passwd | cut -f1,7 -d: 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); 答:#egrp -o &…

    Linux干货 2017-02-25
  • Linux基础知识

    一、描述计算机的组成及其功能 计算机由运算器、控制器、存储器、I/O设备五大部件组成。 运算器和控制器统称为中央处理器,俗称CPU。    1、运算器:实现算术运算和逻辑运算的部件;    2、控制器:计算机的指挥系统,控制计算机的其他部件,使得个部件有条不紊地协调工作;    3、存储器:存储数据…

    2017-07-08