Shell 符号的应用

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

一、分号 ;

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

二、美元符号 $

用于变量的引用

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

一般表达式中表 行尾

echo -e "12323\nadabb" | 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

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

posted @ 2019-12-12 23:52  zeotoone  阅读(540)  评论(0编辑  收藏  举报