shell所有字符简介

特殊字符:

;    命令分隔符。可以在一行上写两个或两个以上的命令。
echo hello; echo there

;;    终止case选项
case "$variable" in
abc)  echo "\$variable = abc" ;;
xyz)  echo "\$variable = xyz" ;;
esac

.    点命令。等价于source命令。这是一个bash的内建命令。
    作为文件名的一部分。点放在文件名的开头,表示这个文件是隐藏文件。如果作为目录明的话,一个单独的点代表当前的工作目录,而两个点代表上一级目录。
    “点”字符匹配。当用作匹配字符的作用时,通常都是作为正则表达式的一部分使用,“点”用来匹配任何的单个字符。

""    部分引用。“STRING”将会阻止(解释)STRING中大部分特殊的字符。

''    全引用。'STRING'将会阻止STRING中所有特殊字符的解释。这是一种比使用""更强烈的形式。

,    逗号操作符。链接一系列的算术操作。虽然里边所有内容都被运行了,但只有最后一项被返回。
let "t2 = ((a = 9, 15 / 3))"

\    转义符

/    文件名路径分隔符。

`    命令替换。`command`结构可以将命令的输出赋值到一个变量中去。

:    空命令。等价于"NOP"(一个什么也不干的命令)。也可以被认为与shell的内建命令true作用相同。":"命令是一个bash的内建命令,它的退出码是"true"(0)。

echo $?
死循环:
while :
do
    operation-1
    operation-2
    ...
    operation-n
在if/then中的占位符:
if condition
then :  #什么都不做,引出分支。
else
    take-some-action
fi
在一个二元命令中提供一个占位符和默认参数。
: ${username=`whoami`}   #如果没有开头的":",将会给出一个错误,除非"username"是一个命令或者内建命令。#这里还使用了命令替换。
使用参数替换来评估字符串变量
: ${HOSTNAME?} ${USER?} ${MAIL?}
变量扩展/字串替换
在与>重定向操作符结合使用时,将会把一个文件清空,但是并不会修改这个文件的权限。如果之前这个文件不存在,那么就创建这个文件。与>>使用不会产生任何影响。
: > data.xxx
:还用来在/etc/passwd和$PATH变量中做分隔符。
bash$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games

!    取反操作符。反转命令的退出码的结果。!操作符是Bash的关键字。

*    通配符。*可以用来作文件名匹配(它有个专有名词叫globbing)的“通配符”。也可以用在正则表达式中,用来匹配任意个数的字符。

*    算术操作符。表示乘法运算。**表示幂运算。

?    测试操作符。在一个特定的表达式中,?用来测试一个条件的结果。
    在一个双括号结构中,?就是C语言的三元操作符。
    在参数替换表达式中,?用来测试一个变量是否被set了。

?    通配符。?在通配(globbing)中,用来做匹配单个字符的通配符,在正则表达式中,用来表示一个字符。

$    变量替换(引用变量的内容)
var1=5
var2=23skidoo
echo $var1

$    行结束符。在正则表达式中,"$"表示行结束符。

${}    参数替换。

$*, $@    位置参数

$?    退出状态码变量。

$$    进程ID变量。

()    命令组
(a=hello; echo $a)在括号中的命令列表,将会作为一个子shell来运行。在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的。父进程,也就是脚本本身,将不能够读取在子进程中创建的变量,也就是在子shell中创建的变量。
    初始化数组
Array=(element1 element2 element3)

{xxx, yyy, zzz, ...}大括号扩展
cat {file1,file2,file3} > combiled_file
#把file1,file2,file3连接在一起并重定向到combiled_file中。
cp file22.{txt, backup}
#拷贝"file22.txt"到"file22.backup"中。
在大括号中,不允许有空白,除非这个空白被引用或转义。
echo {file1,file2} \ :{\ A, " B", ' C'}

{}    代码块。又被称为内部组。这个结构事实上创建了一个匿名函数(一个没有名字的函数)。与"标准"函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。

{} \    路径名。一般都在find命令中使用。这不是一个shell内建命令。

[]    条件测试。条件测试表达式放在[]中。值得注意的是[是shell内建test命令中的一部分,并不是/usr/bin/test中的外部命令的一个链接。

[[]]    测试。测试表达式放在[[]]中。它是shell关键字。

[]    数组元素。
Array[1]=slot_1
echo ${Array[1]}

[]    字符范围。用作正则表达式的一部分,方括号描述一个匹配的字符范围。

(())    整数扩展。扩展并计算在(())中的整数表达式。

> &> >& >> < <>重定向
scriptname >filename 重定向scriptname的输出到文件filename中。如果filename存在的话,那么将会被覆盖。
command &>filename 重定向command的stdout和stderr到filename中。
command >&2 重定向command的stdout到stderr中。
scriptname >>filename 把scriptname的输出追加到文件filename中。如果filename不存在的话,将会被创建。
[i]<>filename 打开文件filename用来读写,并且分给文件描述符i给这个文件。如果文件不存在将会被创建。
(command)>
<(command) 进程替换

<<    用在here document中的重定向
<<<    用在here string中的重定向
<, >    ASCII比较。即小于号和大于号。

\<, \>    正则表达式中的单词边界。
bash$ grep '\<the\>' textfile

|    管道。分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。
echo ls -l | sh
cat *.lst | sort | uniq
管道是进程间通讯的一个典型办法,将一个进程的stdout放到另一个进程的stdin中。标准的方法是将一个一般命令的输出,比如cat或者echo,传递到一个"过滤命令"(在这个过滤命令中将处理输入)中,然后得到结果。
cat $filename1 $filename2 | grep $search_word
管道中的每个进程的stdout必须被下一个进程作为stdin来读入。否则,数据流会阻塞,并且管道将产生一些非预期的行为。
作为子进程的运行的管道,不能够改变脚本的变量。
variable="initial_value"
echo "new_value" | read variable
echo "variable = $variable" #variable = initial_value
如果管道中的某个命令产生了一个一场,并中途失败,那么这个管道将过早的终止,这种行为被叫做broken pipe,并且这种状态下将发送一个SIGPIPE信号。

>|    强制重定向

||    或-逻辑操作

&    后台运行命令。一个命令后边跟一个&表示在后台运行。
bash$ sleep 10 &
在一个脚本中,命令和循环都可能运行在后台。
for i in 1 2 3 4 5 6 7 8 9 10
do
  echo -n "$i "
done &        #在后台运行这个循环

&&    与-逻辑操作

-    选项,前缀。在所有的命令内如果想使用选项参数的话,前边都要加上"-".
COMMAND -[Option1][Option2][...]
    用于重定向stdin或stdout。以"-"开头的文件名在使用"-"作为重定向操作符的时候,可能会产生问题,应该写一个脚本来检查这个问题,并给这个文件加上合适的前缀。
    先前的工作目录
    减号

=    等号

+    加号
    在另一种上下文环境中,+也是一种正则表达式操作。
    选项。一个命令或者过滤器的选项标记。某些内建命令使用+来打开特定的选项,用-来禁用这些特定的选项。

%    取模
    在不同的上下文中,%也是一种模式匹配操作。

~    home目录。相当于$HOME内部变量

~+    当前工作目录。相当于$PWD内部变量

~-    先前的工作目录。相当于$OLDPWD内部变量。

=~    正则表达式匹配。

^    行首。在正则表达式中,"^"表示定位到文本行的行首。

控制字符    修改终端或文本显示的行为。控制字符以CONTROL + key这种方式进行组合。控制字符也可以使用8进制或16进制表示法来进行表示,但是前边必须要加上转义符。控制字符在脚本中不能正常使用。
Ctl-B    退格(非破坏性的),就是退格但不删掉前面的字符。
Ctl-C    break.终结一个前台作业。
Ctl-D    从一个shell中登出。
Ctl-G    在一些老式的打字机终端上,它会响一下铃。
Ctl-H    退格(破坏性的),就是退格之后,还要删掉前边的字符。
a="^H^H"    #两个Ctl-H
echo "abcdef"
echo -n "abcdef$a "    #abcd f
Ctl-I    水平制表符
Ctl-J    重起一行(换一行并到行首)
Ctl-K    垂直制表符
Ctl-L    清屏
Ctl-M    回车
Ctl-Q    恢复(XON).在一个终端中恢复stdin
Ctl-S    挂起(XOFF)。在一个终端中冻结stdin。(使用Ctl-Q可以恢复输入)
Ctl-U    删除光标到行首的所有字符
Ctl-V    当输入字符时,Ctl-V允许插入控制字符。
Ctl-W    当在控制台或一个xterm窗口敲入文本时,Ctl-W将会删除当前光标到左边最近一个空格间的全部字符。在某些设置下,Ctl-W将会删除当前光标左边第一个非字母或数字之间的全部字符。
Ctl-Z    暂停前台作业

空白    用来分隔函数,命令或变量。空白包含空格,tab,空行,或者是它们之间任意的组合体。在某些上下文中,比如变量赋值,空白是不被允许的,会产生语法错误。
空行不会影响脚本的行为,因此使用空行可以很好的划分独立的函数段以增加可读性。
特殊变量$IFS用来做一些输入命令的分隔符,默认情况下是空白。
如果想在字符串或变量中使用空白,那么应该使用引用。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值