Linux中的特殊符号积累(持续更新)

学习使用Linux的过程中遇到过各种各样的符号,很多都不知道其表示的具体含义,遂准备写一篇关于Linux中特殊符号含义解析的文章,这样即做到了积累学习,也做到有备无患,以备不时之需。

各式符号错综复杂,由于现阶段理解不够透彻,先用标题将各个符号分开,后续随着熟悉程度增加会考虑找时间再用表格的形式归纳以下,这样也更方便查阅。

(1).
当前目录

上一级目录
如果档案名称以 dot 开头,该档案就属特殊档案,用 ls 指令必须加上 -a 选项才会显示。除此之外,在 regularexpression 中,一个 dot 代表匹配一个字元

(2)* 星号 (wild card)
在文件名扩展(Filename expansion)上,她用来代表任何字元,包含 null 字元。
在运算时,它则代表 “乘法”。除了内建指令 let,还有一个关于运算的指令expr,星号在这里也担任"乘法"的角色。不过在使用上得小心,他的前面必须加上escape 字元。

[root@localhost ~]# let "fmult=2*3"
[root@localhost ~]# echo "a = $fmult"
a = 6

** 次方运算
两个星号在运算时代表 “次方” 的意思。

[root@localhost ~]# let "suss=2**4"
[root@localhost ~]# echo "sus = $suss"
sus = 16

(3)&
单一个&符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。
tar cvfz data.tar.gz data > /dev/null&

&&
逻辑符号
代表 and 逻辑的符号。

(4)#
管理员root等用户
井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行。

(5)$
普通用户
变量替换(Variable Substitution)的代表符号。

[root@localhost ~]# vrs=123
[root@localhost ~]# echo "vrss = $vrs"
vrss = 123

${}
变量的正规表达式,里面放的是变量。
bash 对 ${} 定义了不少用法。以下是取自线上说明的表列:
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
${parameter:offset}
${parameter:offset:length}
${!prefix*}
${#parameter}
${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
${parameter/pattern/string}
${parameter//pattern/string}

$()
等价于

例如todaydate=$(date +%Y%m%d)意思是执行date命令,返回执行结果给变量todaydate,也可以写为todaydate=date +%Y%m%d

$? 状态值 (status variable)
一般来说,UNIX(linux) 系统的进程以执行系统调用exit()来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。
一般指令程序倘若执行成功,其回传值为 0;失败为 1。

[root@localhost ~]# tar cvzf backup.tar.gz scripts/ > /dev/null
[root@localhost ~]# echo $?
0
[root@localhost ~]#

由于进程的ID是唯一的,所以在同一个时间,不可能有重复性的PID。有时,script会需要产生临时文件,用来存放必要的资料。而此script亦有可能在同一时间被使用者们使用。在这种情况下,固定文件名在写法上就显的不可靠。唯有产生动态文件名,才能符合需要。$$符号或许可以符合这种需求。它代表当前shell 的 PID。

[root@localhost ~]# echo "$HOSTNAME, $USER, $MAIL" > ftmp.$$
[root@localhost ~]# ll ftm*
-rw-r--r--. 1 root root 39 Jun 17 09:50 ftmp.4316
[root@localhost ~]# echo $$
4316
[root@localhost ~]#

使用它来作为文件名的一部份,可以避免在同一时间,产生相同文件名的覆盖现象。
ps: 基本上,系统会回收执行完毕的 PID,然后再次依需要分配使用。所以 script 即使临时文件是使用动态档名的写法,如果script 执行完毕后仍不加以清除,会产生其他问题。

$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过 9 个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
$# 是传给脚本的参数个数,作用是告诉你,引用变量的总数量是多少。
$ 0 是脚本本身的名字
$ 1 是传递给该shell脚本的第一个参数
$ 2 是传递给该shell脚本的第二个参数

${10} 是传递给该shell脚本的第十个参数
个位数的,可直接使用数字,但两位数以上,则必须使用 {} 符号来括住。

$相关内容在我的另一篇文章中也有简介:
https://blog.csdn.net/qq_16268979/article/details/109561878

(6)~
表示代码主目录,也就是当前登bai录用户的用户目录du。

[admin@localhost ~]$ pwd
/home/admin
[admin@localhost ~]$ cd ~
[admin@localhost ~]$ pwd
/home/admin
[admin@localhost ~]$ 

~+
~-

(7)=、==和!=
=等号 (Equals),常在设定变数时看到的符号。

[root@localhost ~]# vrs=123
[root@localhost ~]# echo "vrss = $vrs"
vrss = 123

或者像是 PATH 的设定,甚至应用在运算或判断式等此类用途上。

== 等号 (Equals)
常在条件判断式中看到,代表 “等于” 的意思。

if [ $vara == $varb ]
...

!= 不等于
常在条件判断式中看到,代表 “不等于” 的意思。

if [ $vara != $varb ]
...

(8);
分号 (Command separator)
担任"连续指令"功能的符号。
例子:cd ~/backup ; mkdir startup ;cp ~/.* startup/.

(9);;
连续分号 (Terminator)
专用在case的选项,担任Terminator(终结者)的角色。
case “$fop” inhelp) echo “Usage: Command -help -version filename”;;version) echo “version 0.1” ;;esac

(10),
常运用在运算当中当做"区隔"用途
#!/bin/bashlet "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 / 3))"echo “t1= $t1, a = $a, b = $b”

(11)/
在路径表示时,代表目录。
cd /
cd …/
通常单一的 / 代表 root 根目录的意思;在四则运算中,代表除法的符号。
let “num1 = ((a = 10 / 2, b = 25 / 5))”

(12)‘\’
在交互模式下的escape字元,有几个作用:
放在指令前,有取消aliases的作用;
放在特殊符号前,则该特殊符号的作用消失;
放在指令的最末端,表示指令连接下一行。

#type rmrm is aliased to `rm -i'# \rm ./*.log
上例,在 rm 指令前加上escape 字元,作用是暂时取消别名的功能,将 rm 指令还原。
#bkdir=/home# echo "Backup dir, \$bkdir = $bkdir"Backup dir,$bkdir = /home
上例echo内的 "\$bkdir",escape将$变数的功能取消了,因此,会输出"$bkdir",而第二个"$bkdir"则会输出变数的内容/home。

(13)| 管道(pipeline)
pipeline 是UNIX系统,基础且重要的观念。连结上个指令的标准输出,做为下个指令的标准输入。
who | wc -l
善用这个观念,对精简 script 有相当的帮助。

(14)! 惊叹号(negate or reverse)
通常它代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于"
if [ “$?” != 0 ]thenecho "Executes error"exit 1fi
在规则表达式中她担任 “反逻辑” 的角色
ls a[!0-9]
上例,代表显示除了a0, a1 … a9这几个文件的其他文件。

(15)? 问号 (wild card)
在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元。

ls a?a1

善用她的特点,可以做比较精确的档名匹配

(16): 冒号
在 bash 中,这是一个内建指令:“什么事都不干”,但返回状态值 0。

[admin@localhost ~]# :
[admin@localhost ~]# echo $?
[admin@localhost ~]# 0
: > f.$$

上面这一行,相当于 cat /dev/null >f.$$。不仅写法简短了,而且执行效率也好上许多。

有时,也会出现以下这类的用法

: ${HOSTNAME?} ${USER?} ${MAIL?}

这行的作用是,检查这些环境变数是否已设置,没有设置的将会以标准错误显示错误讯息。像这种检查如果使用类似 test 或 if这类的做法,基本上也可以处理,但都比不上上例的简洁与效率。
除了上述之外,还有一个地方必须使用冒号

PATH=$PATH:$HOME/fbin:$HOME/fperl:/usr/local/mozilla

在使用者自己的HOME 目录下的 .bash_profile或任何功能相似的档案中,设定关于"路径"的场合中,我们都使用冒号,来做区隔

(17)^

(18)command{}

(19)[]

(20)[[]]

(21)()

(22)(())

(23)||

(24){xx,yy,zz,…}

(25)<…>

(26)+

(27)-

(28)%

(29)‘string’
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。

[root@localhost ~]# heyyou=home
[root@localhost ~]# echo '$heyyou'
$heyyou

(30)“string”
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。

[root@localhost ~]# heyyou=home
[root@localhost ~]# echo '$heyyou'
$heyyou
[root@localhost ~]# echo "$heyyou"
home
[root@localhost ~]# 

输出/输入重导向
1、>
2、>>
3、<
4、<<
5、:>
6、&>
7、2&>
8、2<>>&
9、>&2

不经一番彻骨寒,怎得梅花扑鼻香。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值