刘刚刚的个人博客

<linux就该这么学>第三章 管道符、重定向与环境变量

创建时间:2021-01-18 22:08:53
更新时间:2021-01-18 22:12:47

通过这些内容可以让命令的使用更加的自由、方便

输入、输出重定向

重定向是将文件和命令之间的操作符

  1. 输入重定向

    将文件的内容,导入到命令中

    # 统计文件的行数,输入到文件中
    >>>
    [root@localhost ~]# cat test.txt
    you are  right
    [root@localhost ~]# wc -l < test.txt 
    1
    符号作用
    命令 < 文件将文件作为命令的标准输入
    命令 << 分界符从标准输入中读入,直到遇见分界符才停止
    命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2
  2. 输入重定向

    将命令的输出重定向到文件中

    # 演示使用覆盖和追加输出
    >>>
    [root@localhost ~]# cat a.txt
    1
    [root@localhost ~]# cat test.txt
    you are  right
    [root@localhost ~]# wc -l < test.txt > a.txt
    [root@localhost ~]# cat a.txt
    1
    [root@localhost ~]# wc -l < test.txt > a.txt
    [root@localhost ~]# cat a.txt
    1
    [root@localhost ~]# wc -l < test.txt >> a.txt
    [root@localhost ~]# cat a.txt
    1
    1
    符号作用
    命令 > 文件将标准输出重定向到一个文件中(清空原有文件的数据)
    命令 2> 文件将错误输出重定向到一个文件中(清空原有文件的数据)
    命令 >> 文件将标准输出重定向到一个文件中(追加到原有内容的后面)
    命令 2>> 文件将错误输出重定向到一个文件中(追加到原有内容的后面)
    命令 &>> 文件将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

管道符

管道符是命令和命令直接的操作符,将前一个命令的输出结果作为下一个命令的标准输入。

命令1 | 命令2 

## 使用管道符修改用户的密码
echo  "linuprobe" | passwd --stdin root

## 使用自定义分节符来接受用户的输入,并发送邮件
mail -s "readme" root@linuxprobe.com << over
tip:

可以使用多个管道符进行命令的拼接

通配符

>>>
[root@localhost ~]# ls -l *.txt
-rw-r--r--. 1 root root  4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root  0 Jan 17 01:12 b.txt
-rw-r--r--. 1 root root 15 Jan 10 19:35 test.txt
[root@localhost ~]# ls -l [a,b,c].txt
-rw-r--r--. 1 root root 4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root 0 Jan 17 01:12 b.txt
[root@localhost ~]# ls -l {a,b,c}.txt
ls: cannot access 'c.txt': No such file or directory
-rw-r--r--. 1 root root 4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root 0 Jan 17 01:12 b.txt

常见通配规则

符号意思
*零个或者多个任意字符
任意单个字符
[0-9]0-9中的任意一个数字
[1,3,5]三个字符中的任意一个字符,也可以写为[135]
{1,3,5}如果不存在相应字符的内容,命令输出时会报错

常用的转义字符

[root@localhost ~]# PRICE= 5
bash: 5: command not found...
[root@localhost ~]# PRICE=5
[root@localhost ~]# echo 'price is $PRICE'
price is $PRICE
[root@localhost ~]# echo "price is $PRICE"
price is 5
[root@localhost ~]# echo "price is $$PRICE"
price is 2548PRICE
[root@localhost ~]# echo "price is \$$PRICE"
price is $5
[root@localhost ~]# echo  `uname`
Linux
字符含义
''单引号,将里面的内容当作字符对待
“”双引号,如果里面有变量,则会用变量的值替换变量名
\反斜杆,将其后跟的内容转义为字符
``反引号,将里面的内容做为命令,执行后输出结果

重要的环境变量

命令的执行方式:

  1. 路径形式直接执行
  2. 别名的形式执行
  3. 内部命令
  4. 外部命令

image-20210118220428939

使用别名alias

通过别名,可以将复杂的命令简化

>>>
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
[root@localhost ~]# alias test=ls
[root@localhost ~]# test
anaconda-ks.cfg  c          Downloads             Pictures   test.txt
a.txt            Desktop    initial-setup-ks.cfg  Public     Videos
b.txt            Documents  Music                 Templates
[root@localhost ~]# unalias test
[root@localhost ~]# test

判断命令是否为外部命令

>>>
[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type uname
uname is /usr/bin/uname

环境变量的使用

linux可以为不同的用户提供不同的运行环境,一个变量对于不同的用户值可能不同

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

当Bash解释外部命令的时候,会在用户定义的变量PATH中进行查找,PATH由多个路径值组成,每个路径使用冒号间隔。

[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@localhost ~]# PATH=$PATH:/root/c
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/c

变量的使用

# 定义变量
WORKDIR=/home/workdir

# 使用变量
echo $WORKDIR

# 提高变量的作用域,将其作为全局变量,其他用户也可以使用
export WORKDIR

# 显示当前用户的所有变量
env

# 显示Bash中的所有变量,包括用户的变量
set 
我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号