RHEL7--第三章

  • 输入输出重定向

标准输入重定向(STDIN,文件描述符为 0 );键盘输入,也可从其他文件或命令输入

# tr [a-z] [A-Z ] < /etc/fstab

标准输出重定向(STDOUT,文件描述符为 1 = 1>,1可以省略);默认输出至屏幕

# ls  /etc/fstab > /tmp/aaa.txt  会覆盖旧内容

# ls  /etc/passwd >> /tmp/aaa.txt  追加内容,不覆盖旧内容

错误输出重定向(STDERR,文件描述符为 2 = 2>,2不可省略);默认输出至屏幕

# ls  error1.txt  2> /tmp/error.txt  会覆盖旧内容

# ls  error2.txt  2>> /tmp/error.txt  追加内容,不覆盖旧内容

 

Note:

1:输出重定向的使用率要比输入重定向高;

2:文件描述符需要细细了解,否则 &1 这个概念就不好理解;

 

命令解析:

1:#COMMAND >> a文件  2>&1

标准输出与错误输出至共同的文件中(追加至原有内容后面);

文件描述符

标准输出为1,1可省略不写直接 > 表示;

错误输出为2,2不可省略 2> ;

& 表示相当于等效于标准输出;

&1 表示标准输出至 a文件;

2>&1 表示错误输出至之前的标准输出 a文件中;

可以通过网络查询相关解释,多百度多GOOGLE。

 

2:命令  <<  分节符

# cat << EOF  

当输入EOF字符时,输入结束

# cat > /path/to/somefile << EOF  

输入字符重定向至/path/to/somefile,当输入EOF时,输入结束;

 

  • 管道命令符

把前一个命令原本要输出到屏幕的标准数据当作后一个命令的标准输入;

格式:命令A | 命令B | 命令C .....

# ls  /etc/passwd  |  wc -l

 

命令解析:

1:# echo "passwd123" | passwd --stdin root

通过管道符和passwd的--stdin参数相组合,完成root的密码修改;

解决自动化脚本一个致命缺陷,需要输入两次密码进行确认。

 

  • 命令行的通配符,glob

通配符种类:

*  :匹配零个或多个字符;

:匹配任意单个字符;

[ ] :匹配指定范围内的任意单个字符;

如:[0-9]:只匹配数字

[a-z]:不区分大小写

[A-Z]:只匹配大写

[^]:匹配指定范围外的任意单个字符;

如:a[^0-9]b  匹配除0-9数字之外的任意单个字符;

 

专用字符集合:

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]:任意大写字母

[:alpha:]:任意大小写字母

[:alnum:]:任意数字或字母

[:space:]:空格字符

[:punct:]:标点符号;

# ls a [[:digit:]]b

  

  • 常用的转义字符

4个最常用的转义字符:

反斜杠 \ :使反斜杠后面的一个变量为单纯的字符串;

# PRICE=5  设置变量 PRICE 的值为 5;

# echo "Price  is  $$PRICE "

# Price  is  3767PRICE  

当存在两个 $ 符号时,双引号引用变量属性,所以结果不同;

# echo "Price  is  \$$PRICE"

当加入 \ 后,第一个 $ 的变量为单纯字符串

# Price  is  $5

单引号 '' :转义其中所有的变量为单纯的字符串;

# echo 'Price  is  $PRICE'

# Price  is  $PRICE  PARIC变量不生效,纯字符

双引号 "" :保留其中的变量属性,不进行转义处理;

# PRICE=5 

# echo "Price  is  $PRICE"

# Price  is  5

反引号 `` :把其中的命令执行后返回结果;按键1 左边的就是反引号;

# ehco  `uname -a`

 

  • 重要的环境变量

何为变量:

变量是一个很重要的概念,无论是bash脚本还是其他语言,都是如此。在bash中,创建变量很简单,给变量一个名称即可。默认情况下,变量的值为空。我们可以通过等号为变量赋值。需要注意的是,变量和变量的值不是一个概念。

当给定变量一个名称后,例如:MYVAR,我们需要通过 $ 取得变量的值,即 $MYVAR。使用echo输出变量的值

# MYVAR=/etc/passwd  变量名赋值

# echo  $MYVAR  或 # cat $MYVAR

#/etc/passwd   或 # 显示passwd内容

 

Linux系统中最重要的10个环境变量:

 

相关命令:

1:alias

格式:alias 别名=' 命令 ' ,命令需要加单引号;

# alias  cdetc='cd  /etc'

# unalias cdetc  删除cdetc别名;
# source  /etc/profile   

2:type  

判断内部外部命令,格式:type  命令

# type  man

# man  is  /usr/bin/man  表示man为外部命令;

# type  type 

# type  is  a  shell  builtin  表示type为内部命令;

3:unset  

# unset  MYVAR  删除指定变量名;

4:env  

# env  显示环境变量;

5:set

# set  设置本地变量;

 

6:export

1):# export  变量名=变量值  显示和设置环境变量即设置了变量且此变量在子shell也能运行;

2):如果当只设置了 变量名=变量值 ,需要让此变量在子shell中生效时,运行如下:

# 变量名=变量值   设置变量并赋值

# XXX=abcd

# export  变量名    此变量名即为环境变量,子shell中生效;

# export  XXX

# bash       进入子shell

# echo  $XXX    查看是否XXX变量在子shell中生效;

# echo  $BASHPID   查看当前bash进程号

# exit         退出子shell

3):添加环境变量的值

# export  PATH=/etc : $PATH

在PATH变量的最左边添加路径 /etc ;并在子shell中生效;

有效期限:临时改变,只在当前shell中生效;仅限于当前用户;

4):修改环境变量的值

# vi ~/.bash_profile

 

7:查看当前有几个子shell

# ps -aux | grep bash

 

Linux中命令分为:内部和外部命令

内部命令:shell内嵌命令

# help COMMAND  查看命令帮助

外部命令:存在在一个目录中,使用时需要去目录中查找,这些目录被定义为 PATH 变量;

# man COMMAND  查看命令帮助

#COMMAND --help  查看命令帮助

 

bash的配置文件

 

按生效范围划分,存在两类:
  全局配置:
    /etc/profile
      /etc/profile.d/*.sh
    /etc/bashrc
  个人配置:
    ~/.bash_profile
    ~/.bashrc

按功能划分,存在两类:
  profile类:为交互式登录的shell提供配置
    全局:/etc/profile,/etc/profile.d/*.sh
    个人:~/.bash_profile
    功用:
      (1)用于定义环境变量
      (2)运行命令或脚本

  bashrc类:为非交互式登录的shell提供配置
    全局:/etc/bashrc
    个人:~/.bashrc
    功用:
      (1)定义命令别名
      (2)定义本地变量

shell登录:
  交互式登录:
    1、直接通过终端输入账号密码登录
    2、使用 su - USERNAME 或 su -l USERNAME 切换的用户
  交互式登录读取顺序:
    /etc/profile ->/etc/profile.d/*.sh ->~/.bash_profile ->~/.bashrc ->/etc/bashrc

  非交互式登录
    1、su USERNAME
    2、图形界面下打开的终端
    3、执行脚本
  非交互式登录读取顺序:
    ~/.bashrc ->/etc/bashrc ->/etc/profile.d/*.sh

编辑配置文件定义的新配置的生效方式:
  (1)重新启动shell进程
  (2)使用source或.命令进程,此方式有副作用

  问题:
  1、定义对所有用户都生效的别名
  2、让用户的PATH环境变量的值多出一个路径,例如多个/usr/local/apache2/bin
    # export PATH="$PATH:/usr/local/apache2/bin"
    # echo $PATH
  或:
    # declare -x PATH="usr/local/apache2/bin"
    # echo $PATH

 

 

 






 

 

 

    

    

 

 

posted on 2019-03-13 14:58  风中的疯子  阅读(274)  评论(0)    收藏  举报

导航