zoukankan      html  css  js  c++  java
  • Shell中的特殊字符(三)

    一 通配符

    [root@192 test]# touch abc
    [root@192 test]#  touch abcd
    [root@192 test]# touch 012
    [root@192 test]# touch 0abc
    [root@192 test]# ls *
    012  0abc  abc  abcd
    #“*”代表所有的文件
    [root@192 test]# ls ?abc
    0abc
    #“?”匹配任意一个字符,所以会匹配 0abc
    #但是不能匹配 abc,因为“?”不能匹配空
    [root@192 test]# ls [0-9]*
    012  0abc
    #匹配任何以数字开头的文件
    [root@192 test]# ls [^0-9]*
    abc  abcd
    #匹配不已数字开头的文件
    [root@192 test]#

    二 特殊字符

     1) 、单引号和双引号

    [root@localhost ~]# name=sc
    #定义变量 name 的值是 sc(就是最正直的人,超哥我了!)
    [root@localhost ~]# echo '$name'
    $name
    #如果输出时使用单引号,则$name 原封不动的输出
    [root@localhost ~]# echo "$name"
    sc
    #如果输出时使用双引号,则会输出变量 name 的值 sc
    [root@localhost ~]# echo `date`
    2018 年 10 月 21 日 星期一 18:16:33 CST
    #反引号括起来的命令会正常执行
    [root@localhost ~]# echo '`date`'
    `date`
    #但是如果反引号命令被单引号括起来,那么这个命令不会执行, `date`会被当成普通字符输出
    [root@localhost ~]# echo "`date`"
    2018 年 10 月 21 日 星期一 18:14:21 CST
    #如果是双引号括起来,那么这个命令又会正常执行

    2) 反引号

    [root@192 ~]# a=$(date)
    [root@192 ~]# echo $a
    2019年 12月 12日 星期四 23:19:40 CST
    [root@192 ~]# b=`date`
    [root@192 ~]# echo $b
    2019年 12月 12日 星期四 23:20:00 CST

    3) 、小括号、中括号和大括号
    在介绍小括号和大括号的区别之前,我们先要解释一个概念,那就是父 Shell 和子 Shell。在我
    们的 Bash 中,是可以调用新的 Bash 的,比如:

    [root@localhost ~]# bash
    [root@localhost ~]#

    这时,我们通过 pstree 命令查看一下进程数:

    [root@192 ~]# pstree
    systemd─┬─ModemManager───2*[{ModemManager}]
            ├─NetworkManager─┬─dhclient
            │                └─2*[{NetworkManager}]
            ├─VGAuthService
            ├─2*[abrt-watch-log]
            ├─abrtd
            ├─accounts-daemon───2*[{accounts-daemon}]
            ├─alsactl
            ├─at-spi-bus-laun─┬─dbus-daemon
            │                 └─3*[{at-spi-bus-laun}]
            ├─at-spi2-registr───2*[{at-spi2-registr}]
            ├─atd
            ├─auditd─┬─audispd─┬─sedispatch
            │        │         └─{audispd}
            │        └─{auditd}
            ├─avahi-daemon───avahi-daemon
            ├─bluetoothd
            ├─boltd───2*[{boltd}]
            ├─chronyd
            ├─colord───2*[{colord}]
            ├─crond
            ├─cupsd
            ├─2*[dbus-daemon]
            ├─dbus-launch
            ├─dnsmasq───dnsmasq
            ├─docker-containe─┬─mongod───31*[{mongod}]
            │                 └─8*[{docker-containe}]
            ├─dockerd-current─┬─docker-containe───10*[{docker-containe}]
            │                 ├─docker-proxy-cu───6*[{docker-proxy-cu}]
            │                 └─10*[{dockerd-current}]
            ├─gdm─┬─X───3*[{X}]
            │     ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬+                                                                          ++
            │     │                 │                 │             │             ├+                                                                          ++
            │     │                 │                 │             │             └+                                                                          ++
            │     │                 │                 │             └─14*[{gnome-sh+
            │     │                 │                 ├─gsd-a11y-settin───3*[{gsd-a+
            │     │                 │                 ├─gsd-clipboard───2*[{gsd-cli+
            │     │                 │                 ├─gsd-color───3*[{gsd-color}]
            │     │                 │                 ├─gsd-datetime───2*[{gsd-date+
            │     │                 │                 ├─gsd-housekeepin───2*[{gsd-h+
            │     │                 │                 ├─gsd-keyboard───3*[{gsd-keyb+
            │     │                 │                 ├─gsd-media-keys───3*[{gsd-me+
            │     │                 │                 ├─gsd-mouse───2*[{gsd-mouse}]
            │     │                 │                 ├─gsd-power───3*[{gsd-power}]
            │     │                 │                 ├─gsd-print-notif───2*[{gsd-p+
            │     │                 │                 ├─gsd-rfkill───2*[{gsd-rfkill+
            │     │                 │                 ├─gsd-screensaver───2*[{gsd-s+
            │     │                 │                 ├─gsd-sharing───3*[{gsd-shari+
            │     │                 │                 ├─gsd-smartcard───4*[{gsd-sma+
            │     │                 │                 ├─gsd-sound───3*[{gsd-sound}]
            │     │                 │                 ├─gsd-wacom───2*[{gsd-wacom}]
            │     │                 │                 ├─gsd-xsettings───3*[{gsd-xse+
            │     │                 │                 └─3*[{gnome-session-b}]
            │     │                 └─2*[{gdm-session-wor}]
            │     └─3*[{gdm}]
            ├─gssproxy───5*[{gssproxy}]
            ├─ibus-portal───2*[{ibus-portal}]
            ├─ibus-x11───2*[{ibus-x11}]
            ├─irqbalance
            ├─ksmtuned───sleep
            ├─libvirtd───16*[{libvirtd}]
            ├─lsmd
            ├─lvmetad
            ├─packagekitd───2*[{packagekitd}]
            ├─polkitd───6*[{polkitd}]
            ├─pulseaudio───2*[{pulseaudio}]
            ├─rngd
            ├─rpcbind
            ├─rsyslogd───2*[{rsyslogd}]
            ├─rtkit-daemon───2*[{rtkit-daemon}]
            ├─smartd
            ├─sshd─┬─sshd───bash───pstree
            │      └─sshd───sftp-server
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-udevd
            ├─tuned───4*[{tuned}]
            ├─udisksd───4*[{udisksd}]
            ├─upowerd───2*[{upowerd}]
            ├─vmtoolsd───{vmtoolsd}
            ├─wpa_supplicant
            └─xdg-permission-───2*[{xdg-permission-}]

    知道了父 Shell 和子 Shell,我们接着解释小括号和大括号的区别。如果是用于一串命令的执行,
    那么小括号和大括号的主要区别在于:
    ()执行一串命令时,需要重新开一个子 shell 进行执行
    {}执行一串命令时,是在当前 shell 执行;
    ()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开;
    ()最后一个命令可以不用分号;
    {}最后一个命令要用分号;
    {}的第一个命令和左括号之间必须要有一个空格;
    ()里的各命令不必和括号有空格;
    ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令。

    [root@192 ~]# echo $name
    sc
    #在父 Shell 中定义变量 name 的值是 sc
    [root@192 ~]# (name=lm;echo $name)
    lm
    #如果用()括起来一串命令,这些命令都可以执行
    #给 name 变量重新赋值,但是这个值只在子 Shell 中生效
    [root@192 ~]# echo $name
    sc
    [root@192 ~]# { name=lm;echo $name;  }
    lm
    #但是用大括号来进行一串命令的执行时, name 变量的修改是直接在父 Shell 当中的
    #注意大括号的格式
    [root@192 ~]# echo $name
    lm
    #所以 name 变量的值已经被修改了
  • 相关阅读:
    UVA
    UVALive
    找一
    买书最低价格
    NABCD模型分析
    二维数组--首尾
    结对开发---环
    结对开发---二维数组
    电梯设计需求调研报告
    数组求和(2)
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12032410.html
Copyright © 2011-2022 走看看