zoukankan      html  css  js  c++  java
  • linux-bash编程(变量,变量类型)

    (1)
    shell: 弱类型编程语言

    强:变量在使用前,必须事先声明,甚至还需要初始化;
    弱:变量用时声明,甚至不区分类型;

    变量赋值:VAR_NAME=VALUE

    (2)
    bash变量类型:
    环境变量
    本地变量(局部变量)
    位置变量
    特殊变量

    (3)变量的类型及作用域
    •本地变量:
    set VARNAME=VALUE: 作用域为整个bash进程;
    引用变量:${varname}, 在不引起歧义的情况下,括号可以省略。


    •局部变量:
    local VARNAME=VALUE:作用域为当前代码段;

    •环境变量:作用域为当前shell进程及其子进程;
    export VARNAME=VALUE //定义环境变量方式1.
    或者:
    VARNAME=VALUE
    export VARNAME //定义环境变量方式2.

    •位置变量:
    $1, $2, ...

    •特殊变量:
    $?: 上一个命令的执行状态返回值;

    •程序执行,可能有两类返回值:
    程序执行结果
    程序状态返回代码(0-255)
    0: 正确执行
    1-255:错误执行,1,2,127系统预留;

    (4)输出重定向:
    >
    >>
    2> //错误重定向
    2>> //错误追加重定向
    &> //输入命令,正确和错误信息都不输出在屏幕上,直接输到你重定向的一个文件内。

    特殊的输出重定向:
    /dev/null: 软件设备, bit bucket,数据黑洞
    解释:
    /dev/null 代表空设备文件,它等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。

    1:在不想把标准输出和标准出错信息输出到控制台,也不想重定向到文件时经常使用
    2:不能忽略其读入功能。从/dev/null读入时都是0
    3:系统的垃圾桶,类似于Windows的回收站,不同的是这个设备有去无回,而回收站还是可以回收的。
    如果程序有输出(标准、错误等),而你又不想让它输出到任何文件、终端,就可以重定向到这个设备去
    4:空设备,bit垃圾箱

    0:表示键盘输入(stdin)
    1:表示标准输出(stdout),系统默认是1
    2:表示错误输出(stderr)

    1>/dev/null等同于 >/dev/null
    >/dev/null 2>/dev/null 等同于 >/dev/null 2>&1
    &1:&表示等同于的意思,2>&1,表示2的输出重定向等于1

    例:
    ①禁止标准输出.

    cat $filename >/dev/null
    # 文件内容丢失,不会输出到标准输出,.

    ②禁止标准错误

    rm $badname 2>/dev/null
    #删除文件错误时,不会再有提示到终端,都丢到/dev/null里去了

    ③禁止标准输出和标准错误的输出.

    cat $filename 2>/dev/null >/dev/null
    # 如果"$filename"不存在,将不会有任何错误信息提示.
    # 如果"$filename"存在, 文件的内容不会打印到标准输出.
    # 因此, 上面的代码根本不会输出任何信息.
    # 当只想测试命令的退出码而不想有任何输出时非常有用。


    (5)
    撤消变量:
    unset VARNAME

    (6)
    •查看当shell中变量:
    set

    •查看当前shell中的环境变量:
    printenv
    env
    export

    •给字符串增加值
    例如:test=aaa
    test=$test:bbb //假设以:号分隔,此时test=aaa:bbb


    同样,环境变量PATH也可以这样处理。
    export PATH=$PATH:/usr/local/python/bin //加不加export都可以


    (7)
    #!/bin/bash //which bash可以显示路径
    # 注释行,不执行
    添加执行权限:chmod +x test.sh
    如果不添加执行权限,也可以用:bash test.sh

    脚本在执行时会启动一个子shell进程;
    命令行中启动的脚本会继承当前shell环境变量;
    系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;


    练习:写一个脚本,完成以下任务
    1、添加5个用户, user1,..., user5
    2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
    3、每个用户添加完成后,都要显示用户某某已经成功添加;
    useradd user1
    echo "user1" | passwd --stdin user1 &> /dev/null
    echo "Add user1 successfully."

    ------山的那一边
  • 相关阅读:
    造轮子杂记2
    Net分布式系统之五:微服务架构
    C#设计模式:责任链模式
    NET Core1.0之CentOS平台开发控制台程序DEMO
    WCF Routing 服务
    设计模式之外观模式
    设计模式之简单工厂模式
    Eclipse快捷键总结
    Spring容器的初始化流程
    IOC容器的创建
  • 原文地址:https://www.cnblogs.com/mountain2011/p/9326656.html
Copyright © 2011-2022 走看看