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 变量的值已经被修改了
  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12032410.html
Copyright © 2011-2022 走看看