zoukankan      html  css  js  c++  java
  • shell 脚本的坑

    最近都在写shell脚本,免不了遇到每个新手都要填的坑,在这里简单记录一下。

    test语句的坑

    test语句在shell脚本里用的非常多,像if语句后面的其实都是test语句,也是新手最容易遇到坑的地方之一

    (1)[: =: unary operator expected

    if [ $var = "hello" ]; then
        echo "world"
    fi

    如果var的值为空,执行上面这段脚本的时候会出现这样的错误./test.sh: line 12: [: =: unary operator expected

    运行脚本之前加上-x参数,在每条命令执行前打印出命,就可以发现问题了,这个时候 [ 跟 "hello"做比较,可以test语句少了个"[",因此解析时会出现语法错误。

    修正为 if [ "$var" = "hello" ] 问题就解决了,有了双引号之后,就可以将空字符与"hello"作比较,这样就不会出错了,当然这个错误只有在var为空值的时候才会发生。

     

    (2)[: too many arguments

    如果var是包含空格的字符串那么在if语句中没有给$var加上双引号时,会出现上面的错误,原因是在解析test语句时,没有引号就不能将=号左边的变量完整的解析成一个字符串,使得其无法跟右边的字符串比较,解决的方法也是给$var加上引号。

     

    ls语句的坑

    file_list=$(ls test/*)
    for file in $file_list; do
        echo $file
    done

    这样一段代码,看上去是没问题的,不过当test目录下的文件有文件名包含空格的话,文件名就会被拆开,这样输出的文件就不是目录下原有的文件了,

    解决的方法是直接把for语句写成 for file in test/* 注意不要写成“test/*”否则所有的文件都会在同一行列出,这样就不能一个个文件地进行操作。

    暂时就这么多坑,后续有的继续加上

  • 相关阅读:
    javascript package的一种简单"优雅"实现
    高效、快速、专业的外科手术团队
    贝塞尔曲线
    经典格斗游戏《街头霸王》的Javascript实现
    该死的痘痘
    同步/异步与阻塞/非阻塞的区别
    Shell echo用法
    凹凸Linux面试题
    VMware Workstation 9下安装Fedora 18教程(转)
    Linux中locale 详解(转)
  • 原文地址:https://www.cnblogs.com/-Lei/p/3309077.html
Copyright © 2011-2022 走看看