zoukankan      html  css  js  c++  java
  • 管道符、重定向与环境变量

    管道符、重定向和环境变量

    我的想法

    所谓重定向,就是把原本要在这里输出的内容输出到另外一个位置中去。

    输入输出重定向

    标准输入重定向:
    可以从键盘中输入,也可以从其他文件或命令中输入。
    所用的符号

    命令 < 文件 将文件作为命令的标准输入
    命令 << 分界符 从标准输入中读入,直到遇到分界符才停止
    命令 <文件1> 文件2 将文件1作为命令的标准输入并将标准输出到文件2
    

    标准输出重定向

    输出到屏幕中,或者把原本要输出到屏幕中的数据信息写到指定的文件夹中。
    所用的符号:

    命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
    命令 2> 文件 将错误输出重定向到一个文件中(...)
    命令 >>文件 将标准输出重定向到一个文件中(追加)
    命令 2>> 文件 将错误输出重定向到一个文件中(...)
    命令 >> 文件 2>&1
    或 命令 &>> 文件
    
    将标准输出与错误输出共同写入到文件按中(追加到原有内容的后面)
    

    为什么上面有2没有1,原有描述符1可写可不写

    输出重定向例子

    ji@ji-virtual-machine:~$ echo 'welcome to my world!' > readm.txt 
    ji@ji-virtual-machine:~$ cat readm.txt 
    welcome to my world!
    ji@ji-virtual-machine:~$ echo 'welcome to my world!' >>readm.txt 
    ji@ji-virtual-machine:~$ cat readm.txt 
    welcome to my world!
    welcome to my world!
    

    把错误输出重定向到文件中

    ji@ji-virtual-machine:~$ ls -l xxxxx 2> readm.txt 
    ji@ji-virtual-machine:~$ cat readm.txt 
    ls: 无法访问xxxxx: 没有那个文件或目录
    

    输入重定向

    使用wc -l 命令查看文件有多少行

    ji@ji-virtual-machine:~$ wc -l < readm.txt 
    1
    

    等价于 cat readm.txt|wc -l

    管道命令符

    把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。
    以找出被限制登录用户的命令为例

    grep "/sbin/nologin" /etc/passwd
    

    统计文本行数的命令是wc -l
    这样就可以把原本要输出到屏幕的信息进行了过滤统计

    ji@ji-virtual-machine:~$ grep "/sbin/nologin" /etc/passwd|wc -l
    0
    

    用翻页的形式查看/etc目录中的文件列表及属性信息

    ls -l /etc/ | more
    

    在root状态下,通过管道符和passwd命令的--stdin参数相结合,可以用一条命令来完成密码重置操作

    echo 'your_pwd' | passwd --stdin root
    

    一条命令实现邮件的发送

    echo ‘Content’ | mail -s 'Subject' your_pwd
    

    管道命令符不止在命令行中使用一次,它可以使用多次,A|B|C

    命令行的通配符

    就是正则中的那些
    [0-9]匹配数字0-9的任何一个
    *代表0个或多个字符
    ?代表匹配单个字符
    [abc] 匹配a,b,c三个字符的任意一个

    ji@ji-virtual-machine:~$ ls -l /dev/sda*
    brw-rw---- 1 root disk 8, 0 12月  1 14:17 /dev/sda
    brw-rw---- 1 root disk 8, 1 12月  1 14:17 /dev/sda1
    brw-rw---- 1 root disk 8, 2 12月  1 14:17 /dev/sda2
    brw-rw---- 1 root disk 8, 5 12月  1 14:17 /dev/sda5
    ji@ji-virtual-machine:~$ ls -l /dev/sda?
    brw-rw---- 1 root disk 8, 1 12月  1 14:17 /dev/sda1
    brw-rw---- 1 root disk 8, 2 12月  1 14:17 /dev/sda2
    brw-rw---- 1 root disk 8, 5 12月  1 14:17 /dev/sda5
    ji@ji-virtual-machine:~$ ls -l /dev/sda[1-9]
    brw-rw---- 1 root disk 8, 1 12月  1 14:17 /dev/sda1
    brw-rw---- 1 root disk 8, 2 12月  1 14:17 /dev/sda2
    brw-rw---- 1 root disk 8, 5 12月  1 14:17 /dev/sda5
    ji@ji-virtual-machine:~$ ls -l /dev/sda[235]
    brw-rw---- 1 root disk 8, 2 12月  1 14:17 /dev/sda2
    brw-rw---- 1 root disk 8, 5 12月  1 14:17 /dev/sda5
    

    重用的转义字符

    反斜杠():使反斜杠后面的一个变量变为单纯的字符串
    单引号(''):转义其中所有的变量为单纯的字符串
    双引号(""):保留其中的变量属性,不进行转义处理
    反引号(``):把其中的命令执行后返回结果
    例子:
    先定义变量,然后输出,小写price不可

    ji@ji-virtual-machine:~$ PRICE=5
    ji@ji-virtual-machine:~$ echo "Price is $PRICE"
    Price is 5
    

    美元符号和变量提取符号合并后的$$作用使显示当前程序的进程ID号码

    ji@ji-virtual-machine:~$ echo "Price is $$PRICE"
    Price is 2597PRICE
    

    这时使用\反斜杠来进行转义;那这里美元符号$提取变量的值

    ji@ji-virtual-machine:~$ echo "Price is \$PRICE"
    Price is $PRICE
    ji@ji-virtual-machine:~$ echo "Price is \$$PRICE"
    Price is $5
    

    将命令执行并返回结果

    ji@ji-virtual-machine:~$ echo `uname -a`
    Linux ji-virtual-machine 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
    

    环境变量

    变量是操作系统用于保存可变值的数据类型。

    环境变量的位置

    每个路径值之间用冒号:分隔

    ji@ji-virtual-machine:~$ echo $PATH
    /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    

    env命令查看系统中的环境变量,但是一大堆
    常见的环境变量

    HOME 用户的主目录(即家目录)
    SHELL 用户在使用的Shell解释器名称
    HISTSIZE 输出的历史命令记录条数
    HISTFILESIZE 保存的历史命令记录条数
    MAIL 邮件保存路径
    LANG 系统语言、语系名称
    RANDOM 生成随意数字
    PS1 Bash解释器的提示符
    PATH 定义解释器搜搜用户执行命令的路径
    EDITOR 用户默认的文本编辑器
    

    Linux作为一个多用户多任务的操作系统,能够为每个用户提供独立的合适的工作环境,即一个相同的变量会由用户不同具有不一样的值。

    变量的来源

    变量是来自与固定的变量名与用户或系统设置的变量值两部分组成,我们也可以自己创建。。但要大写
    例如:
    创建一个变量为一个文件目录,可以cd该变量进入目录
    赋值变量时候不能空格

    root@ji-virtual-machine:/home/ji# WORKDIR = /home/workdir
    WORKDIR:未找到命令
    root@ji-virtual-machine:/home/ji# WORKDIR=/home/workdir
    root@ji-virtual-machine:/home/ji# cd $WORKDIR 
    

    当然变量不是全局性的,可以使用export 变量名作为全局性的

    ## 普通用户无该变量
    ji@ji-virtual-machine:~$ echo $WORKDIR
    ## 变成全局变量;但我这ubuntu好像并不行
    root@ji-virtual-machine:/home/ji# export WORKDIR
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    Robot FrameWork基础学习(二)
    如何做好接口测试?
    性能测试之Jmeter学习(十)
    性能测试之Jmeter学习(九)
    python基础数据类型的相关知识点
    python基础知识 -- set集合
    python基础小知识,is和==的区别,编码和解码
    python中的数据类型之元组和字典
    python中 列表常用的操作
    python中的字符串(str)操作
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15629357.html
Copyright © 2011-2022 走看看