zoukankan      html  css  js  c++  java
  • linux之shell-特殊字符

    Shell 中的特殊字符参考链接:

    https://www.runoob.com/w3cnote/shell-special-char.html

    ----------$符号(美元符号)----------

    1、取变量的值

    # a=10

    # echo $a

    10

    2、正则表达式表示行尾

    egrep ':$' /etc/inittab 

    egrep ‘^hello$' file

    3、额外补充

    $0:当前shell脚本的文件名
    $1:shell脚本的第一个位置参数
    $2:shell脚本的第二个位置参数
    $3:shell脚本的第三个位置参数
    $9之后要加{};例如${10}、${11}...
    $*:所有传递的位置参数
    $@:所有传递的位置参数
    $*与$@区别:不加""(双引号)时候两者相同
      加了引号后,$*把参数作为一个整体(单字符)返回,$@把每个参数作为一个字符串返回
    $#:所有传参的总个数
    $$:当前程序运行的PID,即脚本运行的当前进程ID号
    $?:上一个命令执行的结果(0为成功非0为失败)
    $!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)
    $-:显示shell使用的当前选项,与set命令功能相同
    $( )中放的是命令,相当于` `(反引号),例如todaydate=$(date +%Y%m%d)意思是执行date命令,
    返回执行结果给变量todaydate,也可以写为todaydate=`date +%Y%m%d`;
    ${ }中放的是变量,例如echo ${PATH}取PATH变量的值并打印,也可以不加括号比如$PATH

    ----------;分号----------

    表示连续运行命令

    # ifdown eth0;ifup eth0

    ----------|管道----------

    1、正则表达式中表示或者

    #echo "lllyy"|grep '(lll|yy)'{2}   表示匹配llll或者yyyy的字符

    2、前面命令的标准输出作为后面命令的标准输入

    #ifconfig |grep eth0   表示ifconfig查出来的信息然后过滤出eth0的这一行

    ----------&----------

    将命令放到后台执行;且放在完整指令列的最后端,即表示将该指令列放入后台中工作

    #mysql_safe --user=mysql &      将mysql放到后台启动

    #tar cvfz data.tar.gz data > /dev/null&   将data.tar.gz压缩包放到后台解压,执行得到的结果输出到/dev/nul里面

    表示标准输出和标准错误输出

    #ifconfig &>/del/null     将ifconfig执行得到的结果输出到/dev/nul里面

    ----------&&----------

    逻辑符号,代表and的逻辑的符号;前面命令返回值为0才执行后面的命令

    #ls && echo "ok"

    ---------||----------

    逻辑符号,代表or的逻辑的符号;前面命令返回值为非0才执行后面的命令

    #lls && echo "ok"

    ----------#----------

    1、#表示注释

      $#表示位置参数的个数

    #echo $#

    0

    2、${#变量名}   表示变量的长度

    #a='hello'

    #echo ${#a}

    5

    3、${#变量名[@]}  表示数组的个数

    #a=(1 2 3)

    #echo $(#a[@]}

    ----------!----------

    叹号;’将命令或者条件表达式的返回值取反

    #if ! [ 1<2 ]; then echo 'ok'; else echo 'no'; fi

    ok

    执行历史命令

    # history 
    1  ls
    2  tail test1.txt
    3  mysql -uroot -p123
    4  ls /tmp/
    5  cd /tmp/
    [root@localhost ~]# !4
    ls /tmp/
    account.sql  data.sql  mysql.sock  t1.txt  t2.txt 

    !!:执行上一条命令

    vi或者ftp中执行外部shell命令

    例如:在vim中,想要执行一条命令,就在末行模式,输入!感叹号后面加上要执行的命令

    间接应用变量

    例如:${!a} ---- 间接取b 的值

    ---------->----------

     大于号;表示输出重定向

    echo '123' >test.txt     表示将123输入到文件text.txt中

    >文件名;表示清空文件中的内容

    >text.txt     表示清空text.txt文件中的所用内容

    ---------->>----------

    输出重定向,追加

    echo "abc" >>text.txt      表示将abc追加到文件text.txt中

    ----------<----------

    小于号;表示输入重定向!本来需要从键盘获取输入的命令会转移到文件读取内容,注意 "<"只能从文件中读取输入。

    #mysql  -u  root   -h 127.0.0.1  -p"MySQL@123"   <  dump.sql       #导入数据库

     # passwd  --stdin root  < passwd.txt           修改密码

      

     ----------<<----------

    Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

    它的基本的形式如下:

    command << delimiter
        document
    delimiter

    它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

    注意:

    • 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
    • 开始的delimiter前后的空格会被忽略掉

    实例

    在命令行中通过 wc -l 命令计算 Here Document 的行数:

    $ wc -l << EOF
        欢迎来到
        菜鸟教程
        www.runoob.com
    EOF
    3          # 输出结果为 3 行
    $

    我们也可以将 Here Document 用在脚本中,例如:

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    cat << EOF
    欢迎来到
    菜鸟教程
    www.runoob.com
    EOF

    执行以上脚本,输出结果:

    欢迎来到
    菜鸟教程
    www.runoob.com

     参考链接:https://www.runoob.com/linux/linux-shell-io-redirections.html

    ----------/dev/null----------

    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null

    #command > /dev/null

    /dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是/dev/null文件

    非常有用,将命令的输出重定向到它,会起到“禁止输出”的效果。

    如果希望屏蔽stdout和stderr,可以这样写:

    #command > /dev/null 2>&1

    注意:0是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)

    这里的2和>之间不可以有空格,2>是一体的时候才表示错误输出。

    ----------- -减号 -----------

    算术运算中的减号 - 例如:10-2

    命令的选项 - 例如:ls -l

    上一次工作目录 - 例如:cd -

    通配符和正则表达式中表示范围 - 例如:[a-z]

    tar -cvf - /home |tar -xvf -

    表示输出流或输入流

    将前面的输出,通过管道交给后面的命令,前面的压缩,后面的解压。

  • 相关阅读:
    windows下cmd命令行上传代码到github的指定库
    Navicat Premium 12.1.11.0安装与激活
    windows部署Apollo
    C#事件-使用事件需要的步骤
    C#委托和事件
    C#事件委托概念
    C#中委托和事件的区别
    C#委托与事件
    C#细说多线程
    C# 堆栈(Stack)和队列(Queue)
  • 原文地址:https://www.cnblogs.com/ly2020/p/13191998.html
Copyright © 2011-2022 走看看