shell 空格问题

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 换行写, 那么也没问题.(bash:==,dash =)

  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就要用空格分开
  空格是命令解析中的重要分隔符

时间: 2024-07-31 15:48:42

shell 空格问题的相关文章

shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断

一.if判断 数字: $A=12 $B=15 if(("$A"<"$B")) if(("$A"=="$B")) 字符串: $A="HELLO" $B="WORLD" if [ "$A" = "FACT_LOGIN_USER" ] if [ "$A" = "$B" ] PS:字符串比较的时候注意 'if'

shell实现trim函数-去除字符串两侧的空格(包括tab,space键)

shell实现trim函数效果去除字符串两侧的空格,以下三个命令等价,都能实现 sed 's/^\s*//' totrim.txt |sed 's/\s*$//'>trimed.txtsed 's/^\s*//;s/\s*$//' totrim.txt>trimed.txtsed -e 's/^\s*//' -e 's/\s*$//' totrim.txt>trimed.txt 主要就是利用正则表达式,^\s*表示字符串前面的零个或多个空格,\s*$表示字符串后面的零个或多个空格.

Shell 处理文件名中包含空格的文件

最近在学Gradle, 使用git clone 命令下载了一些资料,但是文件名含有空格,看上去不是很舒服,因此想到用shell脚本对其进行批处理,去掉文件名中的空格,注意这里是把所有的空格全去掉 git clone https://github.com/waylau/Gradle-2-User-Guide-Demos.git Shell脚本: ######################################################################### # F

Shell脚本传递带有空格的参数

在另一博文<Shell脚本实现DB2数据库表导出到文件>中实现了通过脚本实现将DB2数据库导出到文件,需要传入七个参数,最后一个是一个带有空格字符串,所以传入的时候有点问题,会自动识别空格,默认会将空格前的当作第7个参数,以下是传入的参数: MD duanwf 23742 CDR_CALL_YYYYMMDD /home/duanwf/asiainfo/export/T141015001_20141014.avl & fetch first 100000 rows only 最后的“fe

shell 中的空格

1. 变量赋值时 = 两边不能有空格. 2. if比较时 = 两遍有空格. 3. [ 的左右两边   和  ] 的左边有空格, 1 #!/bin/sh 2 # 字符串比较 3 aa= 4 bb="hello" 5 cc="world" 6 7 # 1.注意判断中的字符串变量用双引号括起来(不括起来在某些情况下会出错); 8 # 2.字符串判断相等用一个等号,不是两个; 9 # 3.=两边有空格; 10 # 4.[的左右两边,]的左边有空格. 11 if [ &quo

shell替换一个或多个空格为逗号

(1)把文本中的一个或者多个空格替换为逗号 文本内容如下: # cat text 1 2 4 2 2 3 4 3 3 4 4 4 4 2 4 (2)shell程序代码为: # cat text | sed 's/[ ][ ]*/,/g' 1,2,4 2,2,3,4 3,3,4 4,4, ,4, ,2,4 脚本说明: s代表替换指令: 每个[ ]都包含有一个空格: *号代表0个或多个: g代表替换每行的所有匹配:

Shell脚本传递带有空格的参数[摘录自网络]

参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 [email protected] 与$#相同,但是使用时加引号,并在引号中返回每个参数. $- 显示Shell使用的当前选项,与set命令功能相同. $? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误. MD duanwf 23742 CDR_CALL_YYYYMMDD /home/duanwf/asiainfo/exp

shell变量赋值 不能有空格的原因

典型例子: a=date echo $a      成立 a =date echo $a     不成立 其实原因很简单 shell在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第一个符号标记就是“a”,当然就不成立了 而没有空格的时候,第一个标记是“a=date”,shell将解释为变量赋值指令,因此可以通过. 这个原则还可以用来解释很多情况

shell 脚本中 空格的注意问题:= 赋值两边不能有空格,而if比较判断时 = 两边必须加空格

shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格 赋值时: i=1 i=$((i+1))                   //    =用作赋值时,两边绝对不能有空格 比较时: if [ $a = $b ]     // =用作比较判断时,两边必须有空格 1.shell脚本变量名.等号.值之间不能有空格 命名须遵循如下规则: ?首个字符必须为字母(a-z,A-Z). ?中间不能有空格,可以使用下划线(_). ?不能使用标点符号. ?不能使用bas