zoukankan      html  css  js  c++  java
  • Shell 符号的应用

    关于 shell 符号,想必刚开始使用 shell 的时候总是会有迷迷糊糊的感觉。这个符号啥意思来着?为啥这个符号这里意义就不一样了?咋怎啊?索性整理了一下

    一、分号 ;

    echo abc;echo 123 命令终止位置,在命令行中可连续运行命令

    二、美元符号 $

    用于变量的引用

    a=test;echo $a 定义变量 a=test,显示变量 a 的值

    一般表达式中表 行尾

    echo -e "12323 adabb" | grep "b$" 查找以 b 字符结尾的行

    与其他符号连接使用

    $# 传递到脚本的参数个数
    $* 以单个字符显示所有向脚本传递的参数. 加双引时则将所有参数视为一个整体
    $@ $* 但加双引号时则保留每个参数区段
    $$ 脚本运行的当前进程 id 号
    $! 后台运行的最后一个进程 id 号
    $? 显示最后命令的退出状态。0 表示成功,其他任何值表示命令执行错误

    三、AND符 &

    在其他语言(java)中,属于位运算符,但是在shell命令行中有不同含义

    命令在行尾时,表示后台运行

    sleep 5 & 此时可以通过 jobs 来验证,sleep 在后台运行

    与重定向符共用时

    ls - >/dev/null 标准输出重定向
    ls 1>/dev/null 标准输出重定向,同上
    ls 2>/dev/null 标准错误输出重定向
    ls - &>/dev/null 标准输出和标准错误输出都重定向
    ls - 2>&1 这里的&用于描述1不是文件,而是将标准输出和错误输出合并重定向

    两个 & 时 (&& ) 表逻辑符,与 java 相同, 与 py3 中的 and 用法一致

    echo aa && echo bb 前面命令执行成功则后面命令才会执行
    [ 1 -gt 2 ] && echo bb 前面命令执行失败 则后面命令不执行

    四、管道符 |

    命令行中表管道符

    echo "aaaab" | tr -s a 将echo 的标准输出作为 tr 命令的标准输入

    正则表达式表 或

    echo abcd | grep -oE '[a|b]' 查找且显示 abcd 中的 a 或 b

    两个 | 时 (||) 表逻辑符,与 java 相同, 与 py3 中的 or 用法一致

    echo aa || echo bb 前面命令执行成功 则后面命令不会执行
    [ 1 -gt 2 ] || echo bb 前面命令执行失败 则后面命令才会执行

    五、井号 #

    在shell 脚本首行与 ! 连用时,表约定标记告诉系统其后路径所指定的程序解释脚本

    #!/bin/bash 告诉系统使用 /bin/bash 来解释此脚本

    在shell脚本中命令行首,表注释符

    # echo "this is a notes" 运行脚本将不执行该行

    脚本参数处理时,表位置参数的个数

    [ "$#" -gt 0 ] && echo gt || echo lt 参数大于0 显示gt 参数小于0 显示 lt

    在字符串操作时,表统计字符个数,掐头

    echo ${#PATH} 统计PATH中字符的个数,不包含不可打印字符(换行符)
    echo ${PATH#*:} 会将PATH变量中第一个 : 前的字符去除
    echo ${PATH##*:} 会将PATH变量中最后一个 : 前的字符去除

    在 sed 中可表分界符

    echo $PATH |sed 's#:#=#g' 将PATH中所有 : 替换为 =

    六、大括号 {}

    通配符扩展

    echo a{1,2,3} 显示 a1 a2 a3 同 echo a{1..3}

    正则表达式中表范围

    echo a1aa | grep -oE "a{2}" 匹配并显示 2 个连续的a

    用于匿名函数

    { sleep 5;echo a; } 休眠5s 后显示 a

    执行花括号中命令时 表当前 shell

    { sleep 10; } 休眠10s 可使用另外shell 窗口查看 bash 进程不发生变化

    括起变量名时,表变量边界

    a=test;echo "${a}aaa" 定义变量并显示 testaaa 若不加花括号无法识别变量则不显示任何字符

    七、圆括号 ()

    执行圆括号中命令时 表子 shell 中执行,会继承父 shell 变量

    (sleep 10; ) 另起子线程休眠10s 可使用另外shell 窗口查看 bash 进程发生变化

    定义数组

    a=(1 2 3 4) 定义一个数组,元素为1 2 3 4 同a=({1..4})

    八、双圆括号 (())

    算术运算

    echo $((2*3)) 显示 2 乘 3 的结果

    整数的比较

    ((1<2)) && echo yes 如果 1 小于 2 则显示 yes

    九、中括号 []

    算术运算

    echo $[1+2] 显示 1 加 2 的结果

    正则表达式中,中括号内的任意字符

    echo a1b2. | grep -oE "[0-9]" 匹配0到9之间的任意数字

    数组中,表示取数组中某下标的值

    a=({1..5});echo ${a[1]} 取数组中下标为 1 的值

    条件测试表达式

    [ -z "" ] && echo yes 字符串长度为0 则显示yes
    a=;[ $a ] && echo not null || echo null 判断变量a是否为空,为空则false
    [ 1 -lt 2 ] && echo bb 如果 1 小于 2 则显示 bb

    十、双中括号 [[]]

    是 [] 的扩展基本作用相同,但[[]] 允许直接使用 && 和 || 等符号

    十一、反引号 ``

    在反引号内部的shell命令将会被执行,其结果输出代替用反引号括起来的文本
    echo `expr 1 + 2` 计算并显示 1 + 2 的结果

    十二、单引号 ' '

    将单引号内的内容原样输出,阻止所有字符的转义
    echo '$PATH' 最终显示 $PATH 字符

    十三、双引号 " "

    把双引号的内容输出出来。如果内容中有命令、变量,则会先把命令,变量解析出结果,然后再输出最终内容。双引号内命令或变量的写法为命令或变量或$(命令或变量)
    echo "$PATH" 会输出系统的 PATH

    注:
    不加引号
    不会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把命令、变量解析出结果,然后再输出最终内容来,如果字符串含有空格等特殊字符,则不能完整输出,则需改加双引号。

  • 相关阅读:
    jar包打包成exe示例(基于maven项目)
    助教小工具
    HUST软件测试1504班: 第0周作业成绩
    软件质量与测试2018春第0周作业1:开设博客
    RobotFramework学习-问题
    Java读取本地文件乱码的解决方案
    滑动窗口模板题(对读写性能要求贼高)
    Invalid index name [xxx], must be lowercase
    Java自动装箱和自动拆箱的理解
    TKMabatis坑
  • 原文地址:https://www.cnblogs.com/zeo-to-one/p/12032374.html
Copyright © 2011-2022 走看看