http://blog.csdn.net/panda19881/article/details/6626727

1.定义变量时, =号的两边不可以留空格.
eg:
gender=femal————right
gender =femal———–wrong
gender= femal———–wrong
2.条件测试语句 [ 符号的两边都要留空格.
eg:
if [ $gender = femal ]; then——-right.
echo “you are femal”;
fi

if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.

3.条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格!
eg:
if [ $gender = femal ]; then——-right.
if [ $gender= femal ]; then——–wrong.
if [ $gender=femal ]; then———wrong.

4.如果if 和 then写在同一行, 那么,注意, then的前面要跟上 ; 号.如果 then 换行写, 那么也没问题.
eg:
if [ $gender = femal ]; then——-right.
if [ $gender = femal ]
then——————————-right.
if [ $gender = femal ] then——-wrong. then前面少了 ; 号.
提示出错信息:
syntax error near unexpected token then
同理,还有很多出错信息 比如
syntax error near unexpected token fi 等都是这样引起的.

5.if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出错信息:
syntax error near unexpected token else

1)if 语句后面需要跟着then,同时前面要有分号;
2) 空格非常重要,shell 会认为空格前的为一个命令,如果a=3 认为是赋值操作,如果写成a = 3,那么就会认为a为一个命令 this=`ls -l |grep ‘^-’ | wc -l `
3) 操作符之间要用空格分开 ,如 test ! -d $1,其中的!和-d就要用空格分开
空格是命令解析中的重要分隔符

6. 命令和其后的参数或对象之间一定要有空格

if [ -x"~/Workspace/shell/a.sh" ];then

只有 -x 后有空格才表示紧跟其后的字符串是否指向一个可执行的文件名,否则就成了测试 -x"~/Workspace/shell/a.sh" 这个字符串是不是空。

7.取变量值的符号'$'和后边的变量或括号不能有空格


http://blog.sina.com.cn/s/blog_5f5716580100l9k1.html

hard quote:单引号,关闭所有的meta(什么是meta,自己查吧)
soft quote:双引号,关闭大部分的meta,但是某些保留,例如$
这里也提一下escape:反斜杠,它只会关闭紧跟escape之后的字符。

参考cu上经典的十三问,hard quote关闭shell的meta,而soft quote关闭大部分的shell meta,但是$例外,对于bash的来说,命令的解释是从左到右的,首先遇到hard quote和soft quote,所作的解释是不一样,看这个例子:
$ a=1
$ echo "$a"
1               #$被bash解释到
$ echo "'$a'"
'1'                #hard quote被关闭
$ echo '$a'
$a                #$被hard quote关闭
$ echo '"$a"'
"$a"            #所有都被关闭了

如果能够理解上面的了,那基本知道怎么用单引号和双引号了。

而对于awk、ed等等命令,需要区分shell meta和command meta
对于awk来说,它的{ }:是将其内的命令置于non-named function 中执行,awk用{ }来区分命令段,例如BEGIN,END等等。举个例子:
$ awk {print $1} b.txt
awk: line 2: missing } near end of file

看看报错,如果直接使用{ },那么我们知道{ }没有被shell关闭,也就是说它看成shell的meta了,当然报错了,所以要关闭,同时shell中的$也关闭,也就是$需要成为awk的meta了,很好理解吧?如下输出了内容。
awk '{print $1}' b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

既然要要关闭{ },那么也可以用soft quote,
awk "{print $0}" b.txt
0
0
0
可以看到,soft quote预期的关闭了{ },但是$还是被shell解释了,这次我们可以用escape,将$关闭了。
$ awk "{print \$0}" b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

说到这里,可以大家都一点明白了,并不是awk '{ }' urfile是awk的固定语法,而是为了让awk能够跳脱shell的偷取其命令和参数,看看这个例子就明白了。
$ awk \{print\ \$0\} b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao

所作的一切是为了让awk或者自己的meta,请切记注意print后的空格,也要关闭,要不又被shell解释了。

2. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.

3、. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。

BTW

4、$()和``的区别
反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
但反引号内不能再引用反引号,而$()中可以引用反引号


1. 除了赋值操作=左右两边不能有空格,其他都要有空格

2. 如果在一行写多句,每一句就要用;分隔

3. 字符串变量也可以自动变成整数 a='123'; echo `expr $a + 1`


shell 编程中空格的使用,双引号,单引号,反引号相关推荐

  1. php编程用空格,shell 编程中空格的使用方法

    1.定义变量时, =号的两边不可以留空格.eg: gender=femal----right gender =femal---–wrong gender= femal---–wrong 2.条件测试语 ...

  2. shell编程中空格的使用

    1.定义变量时, =号的两边不可以留空格. eg: gender=femal----right gender =femal---–wrong gender= femal---–wrong 2.条件测试 ...

  3. shell 编程中空格的使用

    1.定义变量时, =号的两边不可以留空格. eg: gender=femal----right gender =femal---–wrong gender= femal---–wrong 2.条件测试 ...

  4. linux shell let命令,shell编程中的let与(())

    let与(()) 在shell编程中是可以互换的:它们在循环语句中控制变量变化非常有用: 使用let语句或者(())我们可以像C语言那样写程序~ 对于变量赋值,判断什么的不用繁琐的$VAR, -eq等 ...

  5. shell编程中特殊字符的问题总结

    shell编程中特殊字符的问题总结 --同事王怡春的总结: 近日在编写shell脚本的遇到的一些问题,然后上网搜搜学习后,以下是总结后的版本,给大家分享,如有问题,错误,欢迎指正 一 通配符( * ) ...

  6. shell编程中for/while/util/case/select/break/continue

    2019独角兽企业重金招聘Python工程师标准>>> Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.w ...

  7. shell 不等于_关于shell编程中的整数值比较的两种方式的简单操作实例

    谈一谈关于shell编程中的整数值比较的两种方式 Shell编程有时处理一个对象时,需要我们对对象进行测试. 只有符合要求的才采取下一步操作,这样做的好处可以避免程序出错. 这个测试的对象可以是文件. ...

  8. shell编程中如何执行oracle语句

    shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...

  9. 掌握shell编程中数组的常见用法及示例

    From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2386.html 给大家分享下数组的用法小例子,希望能给大家一点帮助. ...

最新文章

  1. Centos7 上安装 mysql5.7
  2. Fedora 16 正式版专题
  3. Oracle “TNS-12535: TNS: 操作超时“故障的解除。
  4. Python中的支持向量机SVM的使用(有实例项目给的地址)
  5. python爬虫框架--scrapy 基本使用
  6. 计算机如何用vb文本加密,信息加密与隐藏工具的设计与实现VB231
  7. Qt笔记-解决QObject::startTimer: Timers cannot be started from another thread
  8. hadoop hdfs 集群模板机配置
  9. c++获取串口设备名称_RTThread PIN设备学习笔记
  10. 多线程的处理 handler   handlerTread Intentservice
  11. 【LOJ#10170】国王
  12. Acunetix Web Vulnarability Scanner V10.5 详细中文手册
  13. 第2章 大数据处理架构Hadoop
  14. 【eoeAndroid特刊】第一期到第十八期
  15. 【python】tkinter教程、35个tkinter示例代码和GUI图示
  16. 全国大学生电子设计竞赛(五)--开关电源的设计
  17. Element-UI省市区(县)三级联动---基于VUX移动框架的x-address组件
  18. java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled.
  19. python滤波器设计
  20. 线性代数 05.07 用合同变换法化二次型为标准形

热门文章

  1. android java服务端_Android/Java从服务器端下载图片
  2. 六十八、SpringBoot连接MongoDB操作
  3. pytorch 和nltk 结合训练的例子
  4. EM算法和GMM(下)
  5. ICCV 2021 | 通过显式寻找物体的extremity区域加快DETR的收敛
  6. 文末送书丨深度迁移学习方法的基本思路
  7. 层次分解位置编码,让BERT可以处理超长文本
  8. 如何兼容自训练与预训练:更高效的半监督文本分类模型
  9. 第三届“中国法研杯”司法人工智能挑赛(CAIL2020)即将启动
  10. CVPR 2019开源论文 | 基于“解构-重构”的图像分类学习框架