zoukankan      html  css  js  c++  java
  • shell综合

    既可恶又不得不注意的地方:

    1、if 与[ 之间必须有空格,

    2、[ ]与判断条件之间也必须有空格,

    3、]与; 之间不能有空格,

    4、变量赋值的时候,等号两边不能有空格,

    调试:
    sh -x xxx.sh 

    shell与编辑器的纠结:
    syntax error: unexpected end of file问题的解决办法
    dos文件转换成 unix 文件格式
         dos 格式 文件 传输到 unix 系统时 , 会在每行的结尾多一个 ^M , 当然也有可能看不到 , 但是在 vi 的时候 , 会在下面显示此文件的格式 , 比如   "dos.txt" [dos] 120L, 2532C 字样 , 表示是一个 [dos] 格式文件 , 如果是 MAC 系统的 , 会显示 [MAC] , 因为文件格式的原因有时会导致我们的 unix 程序 , 或者 shell 程序出现错误 , 那么需要把这些 dos 文件格式转换成 unix 格式 , 方法是
         vi   dos.txt         
         :set fileformat=unix
         :w                      
    这样文件就转换成 unix 格式 文件了 ,一般在 windows 机器上编写好了文件传到 unix 下就可能会出现这样的情况 , 而一般我们使用 ftp 命令, 常常会加上 bin 参数表示二进制传输, 可是试一下不加 bin 参数 , 可能传到 unix 下就是 unix 格式

    tip1:求绝对值

    ${-300#-}
    分析:
    ${varname#sub}
    将$varname开头部分的sub去掉
    ${varaname%sub}
    将$varname结尾部分的sub去掉

    tip2:获取系统当前时间戳

    now=`date +%s`

    注意:date和+号之间有空格。

    tip3:读取一个文件里的内容,并对其进行处理

    #!/bin/bash
    
    now=`date +%s`
    #echo $now
    cat ./listencron.log | while read line
    do
        value=$[$now-$line]
        r=${value#-}
        if [ $r -gt 300 ];then
            echo "it is no"
            /bin/bash ./a.sh
            ps -ef|grep cron.php|grep -v grep|cut -c 9-15|xargs kill -9
            cd /data/test && /usr/bin/php /data/test/cron.php
        else
            echo "it is ok"
        fi
    done

    tip4:执行一个shell脚本,并且传入参数

    #!/bin/bash
    echo "The first agrv is $1"
    echo "The second agrv is $2"

    ./test.sh aaa bbb
    注:$1 -$n  代表的就是第几个参数。并且要给予该文件x权限。

    tip5:shell里的时间与时间戳转换
    date +%s   可以得到UNIX的时间戳;
    用shell将时间字符串与时间戳互转:
          date -d "2010-10-18 00:00:00" +%s         输出形如:1287331200
    而时间戳转换为字符串可以这样做:
          date -d @1287331200  "+%Y-%m-%d"    输出形如:2010-10-18
    如果需要得到指定日期的前后几天,可以:
          1、seconds=`date -d "2010-10-18 00:00:00" +%s`       #得到时间戳
          2、seconds_new=`expr $seconds + 86400`                   #加上一天的秒数86400
          3、date_new=`date -d @$seconds_new "+%Y-%m-%d"`   #获得指定日前加上一天的日前
     
    date 的具体用法可以查看另外一篇博文 《shell date 命令详解》http://blog.csdn.net/runming918/article/details/7223520

    tip6:循环中依次+1比较特殊

    #!/bin/bash  
    count=1    //赋值语句,不加空格  
    cat test | while read line        //cat 命令的输出作为read命令的输入,read读到的值放在line中  
    do
       echo "Line $count:$line"  
       count=$[ $count + 1 ]          //注意中括号中的空格。   
    done  

    备注:如果直接用count=$count+1,则会输出1+1.

  • 相关阅读:
    SEO(Business)
    C#数组去掉重复的元素
    文件创建与文件格式的修改
    Filter(20160815)
    OmniGraffle导入stencils的两个方法以及优质的stencils下载网站推荐
    在Axure RP 8.0 中使用 Font Awesome 图标库完成设计并能在其他未安装该字体的电脑离线预览的方法
    社会性动物(艾略特•阿伦森)
    MacTex 在XeLaTex编译状态下插入的pdf格式图片无法显示问题的解决方案
    Markdown,别来无恙!
    男人来自火星 女人来自金星(约翰·格雷)
  • 原文地址:https://www.cnblogs.com/thinksasa/p/3482723.html
Copyright © 2011-2022 走看看