加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

Linux Shell中的特殊符号汇总

发布时间:2020-12-30 13:07:30 所属栏目:安全 来源:网络整理
导读:副标题#e# 《Linux Shell中的特殊符号汇总》要点: 本文介绍了Linux Shell中的特殊符号汇总,希望对您有用。如果有疑问,可以联系我们。 在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好
副标题[/!--empirenews.page--]

《Linux Shell中的特殊符号汇总》要点:
本文介绍了Linux Shell中的特殊符号汇总,希望对您有用。如果有疑问,可以联系我们。

在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果;但另一方面要避免这些特殊符号的过度使用而导致脚本难以调试、难以阅读.

这些特殊符号罗列出来大致如下:
# ; ;; .,/ / ‘string’| ! $ ${} $? $$ $* “string”* ** ? : ^ $# $@ `command`{} [] [[]] () (()) || && {xx,yy,zz,…}~ ~+ ~- & / + – %= == !=

输出/输入重导向:
> >> < << : > &> 2&> 2<>>& >&2

下面就逐一介绍这些特殊符号的含义和用法……

# 井号 (comments)
这几乎是个满场都有的符号.
#!/bin/bash
井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行.
# This line is comments.
echo “a = $a” # a = 0
由于这个特性,当临时不想执行某行指令时,只需在该行开头加上 # 就行了.这常用在撰写过程中.
#echo “a = $a” # a = 0
如果被用在指令中,或者引号双引号括住的话,或者在倒斜线的后面,那他就变成一般符号,不具上述的特殊功能.

~ 帐户的 home 目录
算是个常见的符号,代表使用者的 home 目录:cd ~;也可以直接在符号后加上某帐户的名称:cd ~user
或者当成是路径的一部份:~/bin;~+ 当前的工作目录,这个符号代表当前的工作目录,她和内建指令 pwd 的作用是相同的.
# echo ~+/var/log
~- 上次的工作目录,这个符号代表上次的工作目录.
# echo ~-/etc/httpd/logs

; 分号 (Command separator)
在 shell 中,担任”连续指令”功能的符号就是”分号”.譬如以下的例子:cd ~/backup ; mkdir startup ; cp ~/.* startup/.

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

. 逗号 (dot)
在 shell 中,使用者应该都清楚,一个 dot 代表当前目录,两个 dot 代表上层目录.
CDPATH=.:~:/home:/home/web:/var:/usr/local
在上行 CDPATH 的设定中,等号后的 dot 代表的就是当前目录的意思.
如果档案名称以 dot 开头,该档案就属特殊档案,用 ls 指令必须加上 -a 选项才会显示.除此之外,在 regular expression 中,一个 dot 代表匹配一个字元.

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

“string” 双引号 (double quote)
被双引号用括住的内容,将被视为单一字串.它防止通配符扩展,但允许变量扩展.这点与单引数的处理方式不同.
heyyou=homeecho “$heyyou” # We get home
`command` 倒引号 (backticks)
在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行.要处理这种情况,我们得用倒单引号来做.
fdv=`date +%F`echo “Today $fdv”
在倒引号内的 date +%F 会被视为指令,执行的结果会带入 fdv 变数中.

,逗点 (comma)
这个符号常运用在运算当中当做”区隔”用途.如下例
#!/bin/bashlet “t1 = ((a = 5 + 3,b = 7 – 1,c = 15 / 3))”echo “t1 = $t1,a = $a,b = $b”

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

倒斜线 (escape)
在交互模式下的escape 字元,有几个作用;放在指令前,有取消 aliases 的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行.
# type rm
rm 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.

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

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

: 冒号
在 bash 中,这是一个内建指令:”什么事都不干”,但返回状态值 0.
:
echo $? # 回应为 0
: > f.$$
上面这一行,相当于 cat /dev/null > f.$$.不仅写法简短了,而且执行效率也好上许多.
有时,也会出现以下这类的用法
: ${HOSTNAME?} ${USER?} ${MAIL?}
这行的作用是,检查这些环境变数是否已设置,没有设置的将会以标准错误显示错误讯息.像这种检查如果使用类似 test 或 if 这类的做法,基本上也可以处理,但都比不上上例的简洁与效率.
除了上述之外,还有一个地方必须使用冒号
PATH=$PATH:$HOME/fbin:$HOME/fperl:/usr/local/mozilla
在使用者自己的HOME 目录下的 .bash_profile 或任何功能相似的档案中,设定关于”路径”的场合中,我们都使用冒号,来做区隔.

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!