[Linux服务器] Linux符号大全

749 0
Honkers 2025-8-15 05:08:21 | 显示全部楼层 |阅读模式

简介

    这篇文章主要介绍shell中的一些常用符号和它们的各自用法,包括搭配命令的符号用法、shell 脚本中的符号用法。在这篇文章中对这些符号做大致的解释,详细的用法在对应目录下增加其他文章的超链接。

         

目录

1. 搭配命令类

1.1. ` `命令输出

1.2. * 通配符

1.3. cd 常用命令

1.4. & 后台命令

1.5. > 输出重定向

1.6. !历史符

2. shell类型

2.1. # 注释

2.2. $符号

2.3. ( ) 圆括号

① 表示命令

② 表示数组

③ 表示计算器

④ 表示循环

2.4. [ ] 方括号

① 表示计算器

② if 判断语句 

③ 双括号判断

2.5. { } 花括号

① 接收变量/数组

② 指定分隔符截取字符串

③ 指定索引截取字符串

④ 判断变量是否为空

2.4. " " 引号

2.5. 正则表达式符号

2.6. 其他符号

3. Linux 后缀名


        

1. 搭配命令类

  • 时常搭配命令使用的符号包括:``、*、-、/、&、|、>、!等。

1.1. ` `命令输出

这个符号可以在命令中执行另一个命令

  1. df -h `pwd` # 查看当前路径下的磁盘占用情况
复制代码

它等同于

        

这个符号与 $( ) 的效果也是一样的,比如

        

所以它们可以相互嵌套

  1. path=$(dirname `realpath $0`)
  2. echo ${path}
复制代码

        

1.2. * 通配符

这个符号是正则表达式中匹配0或多个字符,搭配命令可以这样使用

  1. ll *.txt # 查看以txt结尾的文件
  2. ll *.sh # 查看以sh结尾的文件
  3. ll file* # 查看以file开头的文件
  4. ll *1* # 查看包含1的文件
复制代码

        

除了 ll 命令,搭配其他命令也是一样的效果

  1. find ./ -name "*.sh"
复制代码

        

1.3. cd 常用命令

cd 常用命令如下

  1. cd # 进入家目录
  2. cd ~ # 进入家目录
  3. cd / # 进入根目录
  4. cd - # 返回上一次目录
  5. cd .. # 进入上一级目录
  6. cd ../.. # 进入上上级目录
复制代码

        

1.4. & 后台命令

这里的后台命令就是指:将某个命令或脚本放到后台执行,使得在执行过程中不阻塞当前终端。语法如下:

  1. # 写法一
  2. [命令] &
  3. # 写法二
  4. nohup [命令] &
复制代码

两种写法都可以,但存在根本上的区别。直接使用 命令 & 推到后台执行后,当前终端窗口断开,那么后台命令自动退出;使用 nohup 命令 & 推到后台,当前终端窗口断开也不会退出。

举个例子

  1. sleep 10 &
复制代码

我们执行一个 sleep 命令后会自动被推到后台执行,并显示PID,通过PID可以查询该进程正在运行。

        

与后台相关的其他命令如下:

  1. jobs # 查看当前窗口执行的后台命令
  2. fg [id] # 将作业切换到前台
  3. bg [id] # 将作业切换到后台
复制代码

在其他文章中介绍了使用 & 实现子进程和一些管理见链接:shell子进程管理-CSDN博客

        

1.5. > 输出重定向

什么是重定向呢?

就是将某个命令或脚本的输出的内容定向到其他地方,这个地方可以是一个文件,也可以是 null。举个例子:将 ls 的内容重定向到一个文件中

  1. ls > tmp.log
复制代码

可以看到,正常情况下 ls 显示了当前目录下的文件/文件夹,但是使用 > 重定向到另一个文件中,则当前终端就不会再显示,而是把输出都放到了 tmp.log 中。

        

除了 > 外,我们还有 一些其他的用法

  1. > # 将内容覆盖到文件
  2. >> # 将内容追加到文件
  3. >/dev/null # 将正常的内容输出为空
  4. 1>/dev/null # 将正常的内容输出为空
  5. 2>/dev/null # 将异常的内容输出为空
  6. &>/dev/null # 将全部内容输出为空(包括正常和异常)
复制代码

大部分 shell 重定向在上述方法都能实现,但如果希望内容既输出到终端,又输出到文件怎么做呢?这时候需要借助一个命令 tee

  1. tee [文件] # 将内容覆盖到文件
  2. tee -a [文件] # 将内容追加到文件
复制代码

举个例子,将 abc 输出到文件

将 abc 输出到屏幕,并且追加到文件

        

1.6. !历史符

!在平时使用是比较多的,先来看看常用方法

  1. !! # 执行上一个命令
  2. !p # 执行上一次以p开头的命令
  3. !20 # 执行历史命令编号为20的命令(使用 history 查看编号)
复制代码

【案例一】执行上一次命令 !!

第1行显示上一个命令是什么,后面的才是执行结果

        

【案例二】执行上一个以 d 开头的命令 !d

执行最后一次以 d 开头的命令

        

2. shell类型

2.1. # 注释

单行注释

  1. 以井号开头
  2. # 注释内容xxx
复制代码

        

多行注释

  1. 以 << 开头 + 开始语,最后以开头语一样的字符结尾
  2. <<EOF
  3. 注释内容1
  4. 注释内容2
  5. 注释内容3
  6. EOF
复制代码

        

vim 命令多行注释

  1. # 末行模式 - 注释整个文件
  2. :%s/^/#/
  3. # 末行模式 - 注释指定行(3-5行)
  4. :3,5s/^/#/
  5. # 命令模式 - 选中注释
  6. 1、光标移动到指定行
  7. 2、Ctrl + v
  8. 3、上下键选中指定行
  9. 4、按下大写 I 键
  10. 5、按下井号键 #
  11. 6、按下ESC退出键
复制代码

        

2.2. $符号

  • 包含变量名、脚本名、位置参数
符号解释
$$表示当前脚本 PID
$*表示所有的位置参数
$@表示所有的位置参数
$#表示参数个数
$?返回上一个指令的状态(0表示正常,其他数字表示异常)
$!表示上个后台运行的PID
$0表示当前脚本名
$1表示第1个位置参数
$2表示第2个位置参数
$n表示第n个位置参数

        

注意:$n 表示位置参数。如果在全局表示脚本的位置参数

  1. #!/bin/bash
  2. echo $1 $2
复制代码

  

如果在函数中则表示函数的位置参数

  1. #!/bin/bash
  2. function f1(){
  3. echo $1 $2
  4. }
  5. f1 "ABC" "YT"
复制代码

        

除了上述的常见用法,还有一些系统内置的变量

符号解释
$USER当前用户的用户名
$HOME当前用户的主目录
$PWD当前工作目录的绝对路径
$OLDPWD上一个工作目录的绝对路径
$HOSTNAME当前主机的主机名
$SECONDSShell启动后的秒数
$RANDOM一个随机数
$LINENO当前代码行的行号
$IFS输入分隔符
$PS1主提示符的字符串
$PS2次提示符的字符串

详细见另一篇文章:shell 编程中内置的变量(冷门又好用)

        

2.3. ( ) 圆括号

① 表示命令

  1. # $() 表示输出命令,等同于反引号``
  2. df -h $(pwd) # 命令中套用命令
  3. # 获取绝对路径的目录(不包含文件)
  4. dirname [路径]
  5. # 获取路径下文件名
  6. basename [路径]
  7. # 获取当前脚本的上层绝对路径
  8. echo `cd $(dirname ${BASH_SOURCE}); pwd`
  9. # 将三个命令看做一个大整体,那么括号中视为一个小整体
  10. command1 (command2 command3)
复制代码

        

② 表示数组

  1. # 顺序索引添加数组
  2. arr=(a1 a2 a3) # 默认索引从0开始,以空格分隔
  3. # 指定索引添加数组
  4. arr=([1]="a1" [4]="a4")
  5. # 替换/添加指定的索引
  6. arr[1]="arr1" # 将索引为 1 的值替换为 arr1,若原索引1为空,那么直接添加
  7. # 拼接两个数组
  8. arr1=(a1 b1) arr2=(a2 b2)
  9. arr3=(${arr1[@]} ${arr2[1]}) # arr1 全部 + arr2 索引 1
  10. echo ${arr3[@]} # a1 b1 b2
  11. # 删除数组
  12. unset arr1[0] # 将 arr1 索引为 0 的值删除
  13. # 输出数组
  14. echo ${arr} # 输出第一个数组
  15. echo ${arr[0]} # 输出第一个数组
  16. echo ${arr[1]} # 输出第二个数组
  17. echo ${arr[@]} # 输出全部数组
  18. echo ${#arr[@]} # 输出数组的个数
  19. # 数组排序
  20. arr=(1 342 23 54)
  21. arr=($(echo ${arr[@]} |xargs -n 1 |sort -n|xargs)) # 升序
  22. arr=($(echo ${arr[@]} |xargs -n 1 |sort -nr|xargs)) # 降序
复制代码

详细的数组用法见另一篇文章:shell 数组的详细用法-CSDN博客 

        

③ 表示计算器

  1. 计算两个值
  2. echo $(( 1 + 1 )) # 2
  3. 计算两个变量相加的值
  4. a=2
  5. b=3
  6. echo $(( a + b )) # 5
  7. 注意:这种方式无法计算浮点数,系统会直接省略,可以使用 echo + bc 命令
  8. 指定浮点数位数:scale
  9. echo "scale=2; 10 / 3" |bc # 3.33
  10. echo "scale=2; 1 + 1.234" |bc # 2.234 浮点数相加无法指定
复制代码

详细的计算器用法见另一篇文章:shell 计算器-CSDN博客

        

④ 表示循环

  1. # for 循环
  2. for (( i=1; i<10; i+=1 ));do
  3. echo $i
  4. done
  5. # 加法
  6. w=0
  7. while [ ${w} -le 10 ] ;do
  8. echo ${w}
  9. (( w += 1 ))
  10. done
复制代码

详细的循环见另一篇文章:shell 循环遍历的详细用法-CSDN博客

        

2.4. [ ] 方括号

① 表示计算器

  1. 计算两个值
  2. echo $[ 1 + 1 ] # 2
  3. 计算两个变量相加的值
  4. a=2
  5. b=3
  6. echo $[ a + b ] # 5
  7. 注意:这种方式无法计算浮点数,系统会直接省略,可以使用 echo + bc 命令
  8. 指定浮点数位数:scale
  9. echo "scale=2; 10 / 3" |bc # 3.33
  10. echo "scale=2; 1 + 1.234" |bc # 2.234 浮点数相加无法指定
复制代码

        

② if 判断语句 

  1. ********************** 逻辑符判断 **************************
  2. 判断:真
  3. [ -f /data ] && echo "如果有 /data 这个文件,那么输出这段字符串"
  4. 判断:假
  5. [ ! -f /data ] && echo "如果没有 /data 这个文件,那么输出这段字符串"
  6. 合理利用逻辑操作符:&& 输出真,|| 输出假
  7. [ -f /data ] && echo "这个文件存在" || echo "这个文件不存在"
  8. ********************** if 语句判断 ************************
  9. 判断上一个指令是否正常
  10. if [ $? -eq 0 ]; then
  11. echo "上一个指令输出正常"
  12. else
  13. echo "上一个指令输出异常, 退出程序"
  14. exit 1
  15. fi
  16. 判断多个指令:-a 表示逻辑与(and)
  17. if [ f1 -eq 1 -a f2 -eq 2 ]; then
  18. echo "f1=1,f2=2 必须满足两个条件即可"
  19. else
  20. echo "不满足两个条件"
  21. fi
  22. 判断多个指令:-o 表示逻辑或(or)
  23. if [ f1 -eq 1 -o f2 -eq 2 ]; then
  24. echo "f1=1,f2=2 满足其中一个条件即可"
  25. else
  26. echo "不满足两个条件"
  27. fi
复制代码

********** 逻辑比较参数 **********

Usage:[ 1 -eq 1 -a 2 -eq 2 ]

-a:逻辑与(and)

-o:逻辑或(or)

********** 数学比较参数 **********
Usage:[ 1 -eq 1 ]
-gt :大于
-eq:等于
-lt  :小于
-ne:不等于
-ge:大于等于
-le :小于等于

********** 字符串比较参数 ********
Usage:[ "string" == "string" ]
==:等于
!=:不等于

********** 文件比较与检查 ********
Usage:[ -f file.txt ]
-f:判断文件存在
-d:判断目录存在
-e:判断文件或目录存在
-z:判断字符串为空
-n:判断字符串不为空
-r:判断文件为可读
-w:判断文件为可写
-x:判断文件为可执行
-s:判断文件存在,且不为空
-O:判断文件存在,且被当前用户拥有
-G:判断文件存在,且默认组为当前用户组
file1 -nt file2:判断文件 file1 比 file2 新
file1 -ot file2:判断文件 file1 比 file2 旧

详细的判断方法见另一篇文章:shell if判断的应用方法-CSDN博客

        

③ 双括号判断

  1. 判断变量是否为空
  2. [[ ! ${var} ]] && echo "变量 var 为空"
  3. 数据运算判断 >、=、<、!=、>=、<=
  4. if [[ ${a} > 1 ]]; then
  5. echo "变量 a 大于 1"
  6. else
  7. echo "变量 a 不大于 1"
  8. fi
  9. 字符串判断
  10. if [[ "${var}" == "string" ]]; then
  11. echo "变量 var 等于 string"
  12. else
  13. echo "变量 var 不等于 string"
  14. fi
  15. 逻辑判断:&& 与、|| 或、!非
  16. [[ 1=1 && 2=2 && 3=3 ]] && echo "需要满足全部条件"
  17. [[ 1=1 || 2=1 || 3=1 ]] && echo "满足其中一个条件即可"
  18. [[ ! 1=1 ]] && 1 不等于 1(取反)
复制代码

        

2.5. { } 花括号

① 接收变量/数组

符号解释
${var}表示接收的变量(标准写法),也可以写 $var
${a[1]}输出数组 a 索引为 1 的值
${a[-1]}输出数组 a 最后1个值,-2 表示倒数第2个
${a[@]}输出全部数组
${#a[@]}输出数组的个数
${#a[0]}输出数组索引为0的字符长度
${a[@]:2:6}输出数组索引为 2 后面的 6 个值
${a[@]::3}输出数组索引为 3 之前的值(0,1,2)
${a[@]:$((pos + 2))}输出索引为 2 后面的所有值(包含索引2)

详细的数组使用方法见另一篇文章:shell 数组的详细用法-CSDN博客 

        

② 指定分隔符截取字符串

符号解释
${a#*/}指定分隔符为 /,不显示第一列
${a##*/}指定分隔符为 /,只显示最后1列
${a%/*}指定分隔符为 /,不显示最后一列
${a%%/*}指定分隔符为 /,只显示第一列
  1. 示例:a=1/2/3/4/5
  2. echo ${a#*/}        # 2/3/4/5
  3. echo ${a##*/} # 5
  4. echo ${a%/*} # 1/2/3/4
  5. echo ${a%%/*} # 1
复制代码

详细的字符串处理方法见另一篇文章:shell 变量、字符串的处理方法-CSDN博客

        

③ 指定索引截取字符串

符号解释
${a:1}截取字符串索引为1开始,后面全部
${a:1:2}截取字符串索引为1开始,后面 2 个
${a:0-1}截取字符串最后1个
${a:0-2}截取字符串最后2个
${a:0-5:3}0-5获取最后5个,:3 从5个值中从左到右截取3个

        

④ 判断变量是否为空

符号解释
${a:-'1'}如果变量 a 为空,那么返回1(1可以为任意字符串)
${a:='1'}如果变量 a 为空,那么给a赋值为1(1可以为任意字符串)
${a:?'error'}如果变量 a 为空,那么退出程序,输出字符串 error(error 可以为任意字符串)

        

2.4. " " 引号

单引号:单引号内的任意字样都会被原样输出,无法使用变量、转译等操作

        

双引号:双引号内可以使用变量、转译、通配符

        

反引号:输出命令 (同 $() 一样)

        

2.5. 正则表达式符号

  • Linux 中 grep、awk、sed 等命令支持正则表达式
字符解释用法
^匹配以什么开始grep -E '^ab' 匹配以ab开头的行
$匹配以什么结尾grep -E 'ab$' 匹配以ab结尾的行
.匹配任意一个字符grep -E 'a.c' 只匹配a与c之间拥有一个字符的行
.+匹配1次或多次grep -E 'a.+c' 匹配a与c之间任意字符的行,不包含ac
*匹配0次或多次grep -E 'a*c' 匹配a与c之间任意字符的行,包含ac
|相当于 orgrep -E 'ab|ac' 匹配包含ab或ac的行
[]匹配括号中任意一个字符grep -E '[ac]' 匹配包含a或c的行
[^]匹配非括号中任意一个字符grep -E '[^ac]' 匹配不包含a或c的行
-[0-9] 匹配数字grep -E [0-9]   匹配包含数字的行
[^0-9] 匹配非数字grep -E [^0-9] 匹配不包含数字的行
[a-z] 匹配小写字符串grep -E [a-z]   匹配包含小写字符串的行
[^a-z] 匹配非小写字符串grep -E [^a-z] 匹配不包含小写字符串的行
[A-Z] 匹配大写字符串grep -E [A-Z]   匹配包含大写字符串的行
[^A-Z] 匹配非大写字符串grep -E [^A-Z] 匹配不包含大写字符串的行
()(a|b) 匹配括号中任意字符grep -E '0(a|b)1' 只匹配0a1和0b1的行
(a)+ 匹配包含1个或多个agrep -E '0(a)+1' 匹配0和1之前1个或多个a,0a1、0aa1...
{}{n} 指定匹配n个以上grep -E 'ab{2}' 匹配包含ab,且a或b连续为2次以上:abb
{n,m} 指定匹配 n-m 个grep -E 'ab{2,3}' 匹配包含ab,且a或b连续为2-3次:abb、aaab

这3个命令的详细用法将其他文章:

Linux命令_grep & 快速查找关键字、文件名

Linux命令_awk & 字符串过滤、文件过滤

Linux命令_sed & 快速修改、删除、增加、过滤文件内容

        

2.6. 其他符号

  1. \ 转译字符,以下常用 3 个作用:
  2. 1、将特殊符号转译为普通符号:\$、\[、\*、\\
  3. 2、某些命令特殊定义:\n 换行、\t 缩进、\r 回车
  4. 3、连接多个命令:用于shell格式调整(命令过长使用 \ 符号,下一行命令延续上一行命令)
  5. : 表示什么也不做,相当于占位符
  6. ; 表示将命令分开(例如: ls aaa; ls bbb  执行完成第一个命令后继续执行第二命令)
  7. ;; 用于 case 命令专属
复制代码

        

3. Linux 后缀名

类型后缀解释
脚本文件.shshell 文件
.pypython 文件
.jarjava 文件
.cc 语言文件
.cppc++ 文件
.hc 或 c++ 头部文件
.o程序目标文件
.phpphp 文件
.tcltcl 文件
.exp交互命令 expect 文件
系统文件.so库文件
.rpmrpm 包
压缩包.tartar 包
.zipzip 包
.tar.gzgzip 包
应用文件.conf配置文件
.sqlsql 文件
普通文件.htmlhtml 文件
.txt文本文件
图像文件.gifGIF 图像文件
.pngPNG 图像文件
.xpmXPM 图像文件

        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行