Linux中的变量及IO管道使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中的变量及IO管道使用相关的知识,希望对你有一定的参考价值。

  • 变量
  • io重定向
  • 管道pipe

  • var-变量
    数学的方程式:设x=2,求y=x^2+2x+1 ?,x和y我们称为未知数,在shell脚本中称为变量,变量用来存储数据,指向内存空间的某个地址,当脚本中重复执行一长串相同代码时,可以使用变量替换,简化代码量,方便开发。

    • 变量赋值
      var_name=value
    • 变量名命名规则:
      1.变量名只能包含数字、字母和下划线,而且不能以数字开头;
      2.变量名最好见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if, else, for, while等等,不同版本稍有区别;
    • bash shell系统中的变量无需声明可以直接调用
    • 变量引用:$var_name /${var_name}
    • 变量类型:

      本地变量:作用域仅为当前shell进程;
      环境变量:作用域为当前shell进程及其子进程;
      局部变量:作用域仅为某代码片断(函数上下文);
      位置参数变量:当执行脚本的shell进程传递的参数;
      特殊变量:shell内置的有特殊功用的变量;
                                  $?:判断上一条命令的执行结果
                                  0:表示成功,1~255:表示失败                                   
    • 引号的特殊含义:

      单引号‘‘:强引用,所有字符原样输出,不转义
      双引号"":弱引用;输出引号内所有内容;若内容中有变量、特殊字符转义等会解析结果,然后在输出
      反引号``:用于引用命令结果如同$(..)

      技术分享图片

    • 本地变量:仅在一个shell中有效,子进程不生效
      用法:var_name=value
      查看变量:set | grep var_name
      撤销变量:unset var_name

    • 环境变量:在当前shell的所有子shell中生效
      用法:
      1. export name=value
      2. name=value
        export name
      3. declare -x name=value
      4. name=value
        declare -x name
        技术分享图片
    • 只读变量:只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程终止而终止;
      用法:
      declare -r var_name=value
      readonly var_name=value
      技术分享图片

    • 查看环境变量命令:export, declare -x, printenv, env,set

    • 但当再重新打开一个终端是,环境变量无效只在当前shell生效,需要定义在全局环境变量配置文件中才会生效。在登录系统时并启动一个shell,一般会加载配置文件中的环境变量。加载的文件跟登录的方式相关。
      bash配置文件分为两类:
      -profile:为交互式登录shell进程提供配置
      全局:对所有用户都生效;
      /etc/profile
      /etc/profile.d/*.sh
      用户个人:仅对当前用户有效;
      ~/.bash_profile
      用途:
      1、用于定义环境变量;
      2、运行命令或脚本;
      -bashrc:为非交互式登录shell进程提供配置
      全局:
      /etc/bashrc
      用户个人:
      ~/.bashrc
      用途:
      1、定义本地变量;
      2、定义命令别名;
      登录与非登录shells:
      登录shells:
      1.任何通过用户登录的shell包括图形界面登录
      2.su -
      非登录shells:
      1.su
      2.图形界面下的终端
      3.脚本
      4.其他bash实例
    • 下面通过在xuetong用户中的四个配置文件中添加echo "/path-dir"来验证加载的文件:/etc/profile,/etc/bashrc,~/.bahs_profile,~/.bashrc;
      技术分享图片
    • 配置文件的读取顺序:
      技术分享图片
      所以如果希望在登录shell和非登录shell都能读到的文件应将变量设置在:~/.bashrc,/etc/bashrc
    • 如何让配置文件中变量生效
      1. 通过命令行重复定义一次;
      2. 让shell进程重读配置文件;
        source /path/conf_file
        . /path/conf_file

  • IO重定向
    IO:input output,程序的数据流有三种:
    输入数据流:默认标准输入为键盘 stdin
    输出数据流:默认标准输出为显示器 stdout
    错误输出流:错误输出也是通过显示器 stderr
    分别使用文件描述:0、1、2
    当我们不希望数据通过标准输入输出时,通过io重定向方法修改:
    输出重定向: >
    特点:会覆盖原有的内容
    输出追加重定向:>>
    特点:在原有的内容后面追加输出
    错误输出流重定向:2> 、2>>
    合并输出流(标准输出、错误输出):
    1.&>,&>>
    2.COMMAND > /path/to/somefile 2>&1
    COMMAND >> /path/to/somefile 2>&1
    输入重定向:<
    多行文本输入:<<
    cat << eof
    cat > /path/to/somefile << eof
    技术分享图片
    有时候执行命令只关心命令有没有执行成功而不关心输出结果,需要用到特殊设备:/dev/null
    技术分享图片
  • 管道pipe
    用于连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
    语法:
    COMMAND1 | COMMAND2 | COMMAND3 | ...
    例如:# tail -n 6 /etc/passwd | tr ‘a-z‘ ‘A-Z‘
    tr命令:把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,或者输出字符
    用法1:
    tr SET1 SET2 < /PATH/FROM/SOMEFILE
    用法2:
    tr -d SET1 < /PATH/FROM/SOMEFILE
    比如取出网卡的IP地址:
    技术分享图片

以上是关于Linux中的变量及IO管道使用的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础入门--IO重定向及管道

探秘linux-文件管理(inode理解)及管道和IO重定向

Linux基础管理—— " 标准IO及重定向及管道 "

Linux 中的 Windows 命名管道替代方案

Linux系统Bash(Shell)基础知识

Linux CentOS 7 Shell基础(命令历史,管道,作业控制,变量及环境变量)