shell编程中的小问题

1、变量用=赋值时左边不能有空格。例如userName =nihao回车后会报userName:未找到命令。因为这里把userName当做命令来处理了。正确的做法是userName=nihao。
仔细才是最重要的,像这样的小问题真是很难发现。不过在用vim编辑器时有高亮显示命令是白色的,变量时绿色的。

2、用read -p 命令读取用户输入时,在-p后的提示后的变量名必须要有空格。例如read -p "Input your name:"Name会输出Input your name:Name,此时用户的输入不会按预期给Name。正确的做法是read -p "Input your name:"  Name(Name前的空格是必须的)。

3、在用==进行字符串比较时,==前后必须要有空格,若没有则是一直为真。例如:

#!/bin/bash
#
if [[ "1"=="2" ]];then
        echo "xiangdeng"
else
        echo "budeng"
fi

 只会输出xiangdeng,必须将[[ "1"=="2" ]]改成[[ "1" == "2" ]]才可以。

 4、[[]]和[]一般可以替换使用,但在=~(即在模式替换的时候)时必须使用[[]]

5、if [ ! -e "/etc/passwd" ]这里!和后面的-e要有空格。

6、算术运算需注意什么时候加$,例如下面sum=$[sum+=$num],里面的sum不能加$,因为这是变量赋值,而算完后在[]外面加$,是取变量的值。

#!/bash/bin
#
declare -i sum=0
for num in {2..4};do
sum=$[sum+=$num]
  shift
done
echo $sum

 7、字符串测试中用到=~去通配两边的时候在右边通配项不能加引号。例如 [[ $? -eq 0 ]] && [[ "$isblock" =~ .*block.* ]],在.*block.*上是不能加""的,如果加上代表完全匹配。两边必须一样才算匹配成功。

8、在grep匹配中,右边匹配的内容若含有-需要用\转义,否则不能正常匹配。如echo -20|grep "\-20"

posted @ 2015-06-18 13:03  codeZhu  阅读(150)  评论(0编辑  收藏  举报