• 元字符


    bash中的特殊字符,键盘上能敲出来的特殊字符都有其特殊意义,强调一点:元字符是被shell解释的

    `` 取命令的执行结果

    [root@MiWiFi-R3-srv ~]# ls
    4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
    [root@MiWiFi-R3-srv ~]# res=`ls` #取命令的运行结果,赋值给变量res
    [root@MiWiFi-R3-srv ~]# echo $res #查看变量res的值
    4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

    $()同上,但它弥补了``的嵌套缺陷

    [root@MiWiFi-R3-srv ~]# res=`echo `ls`` #嵌套使用后无法达到预想的效果:取echo 一堆文件名的效果。

    [root@MiWiFi-R3-srv ~]# echo $res
    ls

    [root@MiWiFi-R3-srv ~]# res=$(echo $(ls)) #替代方案
    [root@MiWiFi-R3-srv ~]# echo $res
    4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

    ~ 家目录

    [root@MiWiFi-R3-srv tmp]# cd ~
    [root@MiWiFi-R3-srv ~]# pwd
    /root

    ! 取非

    [root@MiWiFi-R3-srv ~]# ls /dev/sda
    sda sda1 sda2
    [root@MiWiFi-R3-srv ~]# ls /dev/sda[0123]
    /dev/sda1 /dev/sda2
    [root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
    /dev/sda2

    ! 历史命令调用

    [root@MiWiFi-R3-srv ~]# !343
    hostname
    MiWiFi-R3-srv

    ! 匹配最近一次历史命令

    [root@MiWiFi-R3-srv ~]# !ls
    ls /dev/sda[!01]
    /dev/sda2

    ! ls 带空格 将命令的返回值取反

    [root@MiWiFi-R3-srv ~]# echo ok
    ok
    [root@MiWiFi-R3-srv ~]# echo $? #上一条命令执行的结果,0代表执行成功,非0代表执行失败
    0
    [root@MiWiFi-R3-srv ~]# ! echo ok #将结果取反
    ok
    [root@MiWiFi-R3-srv ~]# echo $?
    1

    @ 无特殊含义

    # 注释

    $ 变量取值
    $() 同``
    ${} 变量名的范围

    [root@MiWiFi-R3-srv ~]# money=10
    [root@MiWiFi-R3-srv ~]# echo $money
    10
    [root@MiWiFi-R3-srv ~]# echo 00000$money
    0000010
    [root@MiWiFi-R3-srv ~]# echo $money0000

    [root@MiWiFi-R3-srv ~]# echo ${money}0000
    100000

    t@myworld tmp]# money=5
    [root@myworld tmp]# echo ${money}0000
    50000

    $[] 整数计算 echo $[2+3] - * / %

    [root@myworld tmp]# x=10
    [root@myworld tmp]# echo $x
    10
    [root@myworld tmp]# echo $x+1
    10+1
    [root@myworld tmp]# echo $[$x+1]
    11

    浮点数用 echo "scale=3; 10/3" | bc -l

    [root@myworld tmp]# echo "scale=3;10/3"|bc -l
    3.333
    [root@myworld tmp]# echo "scale=2;10/3"|bc -l
    3.33

    % 杀后台进程 jobs号; 取模

    ^ 取非 和 ! 雷同

    [root@MiWiFi-R3-srv ~]# ls /dev/sda[^01]
    /dev/sda2
    [root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
    /dev/sda2

    ^ 替换

    [root@MiWiFi-R3-srv ~]# systemctl restart network
    [root@MiWiFi-R3-srv ~]# ^network^sshd^
    systemctl restart sshd

    & 后台执行;&& 逻辑与

    * 匹配任意长度字符串;计算乘法

    () 在子进程中执行

    [root@MiWiFi-R3-srv ~]# x=1
    [root@MiWiFi-R3-srv ~]# (x=666)
    [root@MiWiFi-R3-srv ~]# echo $x
    1
    [root@MiWiFi-R3-srv ~]#
    [root@MiWiFi-R3-srv ~]# (x=666;echo $x)
    666

    - 减号;区间;cd -;

    _ 无特殊含义

    + 加号 ;

    = 赋值

    | 管道; || 逻辑或

    转义;

    {} 命令列表 ,注意括号内的开头和结尾必须是空格{    ls; cd /;   }

    [] 字符通配,匹配括号内之一;

    [   ]:比较变量数值大小,同test,注意括号内的开头和结尾必须是空格[ $x == $y ]:

    [root@myworld /]# x=1
    [root@myworld /]# y=2
    [root@myworld /]# test $x == $y
    [root@myworld /]# echo $?
    1
    [root@myworld /]# [ $x == $y ]
    [root@myworld /]# echo $?
    1
    [root@myworld /]# [ $x < $y ]
    [root@myworld /]# echo $?
    0

    : 空命令 真值

    [root@MiWiFi-R3-srv ~]# :
    [root@MiWiFi-R3-srv ~]# echo $?
    0

    ; 可以接多个命令:ls;pwd;echo 123;无论对错,会一直执行到最后一条命令

    * 通配符:任意字符
    ? 通配符:任一字符

    [root@myworld tmp]# ls *.txt
    10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
    [root@myworld tmp]# ls ?.txt
    1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
    [abc] 列表项之一
    [^abc] 对列表取非 也可以使用范围 [a-z] 代表aAbBcC...z,[0-9]代表01234...9
    {} 循环列表

    [root@MiWiFi-R3-srv test]# touch {1..3}{a..d}.txt
    [root@MiWiFi-R3-srv test]# ls
    1a.txt 1b.txt 1c.txt 1d.txt 2a.txt 2b.txt 2c.txt 2d.txt 3a.txt 3b.txt 3c.txt 3d

    硬引用与软引用

    [root@MiWiFi-R3-srv test]# x=1
    [root@MiWiFi-R3-srv test]# echo "$x" #双引号的代表软引用,引号内特殊字符有特殊意义,比如$,``等
    1
    [root@MiWiFi-R3-srv test]# echo '$x' #单引号代表硬引用,引号内所有字符都无特殊意义
    $x

    转意

    '[root@myworld /]# x=1
    [root@myworld /]# echo $x
    1
    [root@myworld /]# echo $x
    $x
    [root@MiWiFi-R3-srv test]# echo "'"
    '

  • 相关阅读:
    史上最全web.xml配置文件元素详解
    SpringMVC后台接收list类型的数据的实现方式
    史上最全的maven的pom.xml文件详解
    阿里菜鸟同学迟到的2018年个人总结(文末彩蛋)
    可以落地的DDD到底长什么样?
    欠的债,这一次都还给你们
    主流分布式架构的风流韵事...
    分布式架构的前世今生...
    分布式架构之美~
    征服诱人的Vagrant!
  • 原文地址:https://www.cnblogs.com/Icarus1900/p/7678996.html
Copyright © 2020-2023  润新知