shell的特殊符号的表示

来源:互联网 发布:学通c语言要多久 编辑:程序博客网 时间:2024/05/17 03:26

shell中存在一些特殊的符号.这些符号可以帮助我们更好的写出shell来

1.特殊字符

符号          使用
            一般情况我们输出完一个命令需要按一个回车,如果你想在一行执行多个命令,中间可以用;号分割  cd /home;ls
*            
表示任意字符(正则)   
?             
任一个字符
[abc]         
列表项之一
[^abc]        
对于列表取非  也可以使用范围 [a-z]  [0-9] [A-Z](所有字符和数字)
{}            
循环列表时用 touch_{1,2,3}时就会建立touch_1,touch_2,touch_3循环出这三个文件,也会用 echo ${ab}c
~             home
目录cd  ~ (普通通话进入的是/home目录下用户自己的家目录)
$             
提取变量值   
`` $()        
命令替换touch `date +%F_\`date +%T\``     touch $(date +%F_$(date +%T))
$[]           
整数计算  echo  $[2+3]     -  * / % 浮点数用  echo  "scale=3; 10/3"  |  bc -l (bc用于计算的)
\            
转义后面的字符串  echo \\ 输出\     转义特殊字符,为防止被SHELL解释bash中的特殊字符
""   ''      
带空格串 将空格视为串的一部分 echo "abc xyz"echo 'abc xyz'
``            
命令替换    取命令的执行结果
$()           
同上,但它弥补了``的嵌套缺陷
@             
无特殊含义
#             
注释(一般编程都需要加注释,让其他团队队员对自己写的程序功能了解)
$             
变量取值
$()           
命令替换
${}           
变量名的范围
%             
杀后台经常jobs号,取模运算(大家对取模应该并不陌生)
^             
取非 和 !雷同
  &          
用进程后台处理, &&用于逻辑与
*             
匹配任意字符串;计算乘法
()            
子进程执行
-            
减号,区间,cd  -  回到上层目录,杀掉当前jobs

_             
(下划线)无特殊含义
+             
加号; 杀掉当前jobs(进程)
=             
赋值
|             
管道,|| 逻辑或
\             
转义  当一些特殊符号如$是一个变量需要转义才不被bash解析
{}            
命令列表  {ls;cd /;}
[]            
字符通配符,[]也是用于测试命令
            空命令  真值
            命令结束符
""            
软引   ''  硬引
<             
输入重定向
>             
输出重定向
>&            
合并21输出
,             
枚举分隔符
.             
当前目录
/             
目录分隔符
?             
单个字符

回车          命令执行


2.实例: 

$符号     是在单双引号有特殊含义的.

echo $?     显示上一条命令退出的状态

echo "$?"   同上

echo '$?'    显示的是$?

echo \$?     显示的是$?

echo "\$?"  显示的是$?

\反斜杠  是将特殊符号的字符的特殊意思屏蔽掉

a=122333

echo \$a   显示$a 

echo $a    显示122333

echo \`      显示`

echo \"      显示双引号

echo \\       显示\

` 反引号(tab键上面的~) 功能是将命令替换,把反引号中的字符串作为命令执行

b=`DATE`

echo $a 会显示当前的时间而不会是DATE

" 双引号  去除掉特殊符号的含义,下面有几个例外

echo """     无效, 实际是想输出 双引号 应该用 echo '"' 或者echo "\""

echo "$"     无效,实际想输出$   应该用    echo '$'   or   echo "\$"

echo "\"      无效,实际想输出\     应该用 echo '\'    or echo "\\"

echo "`"      无效,实际想输出`     应该用 echo '`'   or echo "\`"


3.其它的符号

整数比较 
-eq       
等于,:if [ "$a" -eq "$b" ] 
-ne       
不等于,:if [ "$a" -ne "$b" ] 
-gt       
大于,:if [ "$a" -gt "$b" ] 
-ge       
大于等于,:if [ "$a" -ge "$b" ] 
-lt       
小于,:if [ "$a" -lt "$b" ] 
-le       
小于等于,:if [ "$a" -le "$b" ] 
<         
小于(需要双括号),:(("$a" < "$b")) 
<=       
小于等于(需要双括号),:(("$a" <= "$b")) 
>        
大于(需要双括号),:(("$a" > "$b")) 
>=       
大于等于(需要双括号),:(("$a" >= "$b")) 

字符串比较 
=       
等于,:if [ "$a" = "$b" ] 
==       
等于,:if [ "$a" == "$b" ],=等价 
       
注意:==的功能在[[]][]中的行为是不同的,如下
       1 [[ $a == z* ]]    # 
如果$a"z"开头(模式匹配)那么将为true 
       2 [[ $a == "z*" ]] # 
如果$a等于z*(字符匹配),那么结果为true 
       3 
       4 [ $a == z* ]      # File globbing 
word splitting将会发生 
       5 [ "$a" == "z*" ] # 
如果$a等于z*(字符匹配),那么结果为true 
       
一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是
       
但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像
!=       
不等于,:if [ "$a" != "$b" ] 
       
这个操作符将在[[]]结构中使用模式匹配
<       
小于,ASCII字母顺序下.
       if [[ "$a" < "$b" ]] 
       if [ "$a" \< "$b" ] 
       
注意:[]结构中"<"需要被转义
>       
大于,ASCII字母顺序下.
       if [[ "$a" > "$b" ]] 
       if [ "$a" \> "$b" ] 
       
注意:[]结构中">"需要被转义
       
具体参考Example 26-11来查看这个操作符应用的例子
-z       
字符串为"null".就是长度为0. 
-n       
字符串不为"null" 
       
注意
       
使用-n[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z 
       
或者就是未用""引用的字符串本身,放到[]结构中。