zoukankan      html  css  js  c++  java
  • linux 小技巧总结

    (1)linux判断文件是否存在

    if [ -f filename]; then
          。。。。。。#要执行的语句
     fi

    具体例子:

    file=/usr/local/oracle/oradata/archived_log/file.txt

     if [ -f $file ];then             #判断文件是否存在,存在就追加
       echo $file_i >> $file
       else                               #否则复写
       echo $file_i > $file
       fi
       fi

    (2)按行读取文件

    record=/usr/local/oracle/oradata/archived_log/recordarch
    file=/usr/local/oracle/oradata/archived_log/file.txt

    for file_i in `cat $record`;
    do
       echo $file_i
       scp -C  $file_i aaa@192.168.1.106:/d:/redo
       flag=$(echo $?)                         #判断SCP是否发送成功,成功返回0
       if [ $flag -eq 0 ];then
       #rm $file_i
       sed -i '/'''$file_i'''/d' $record
       echo "success delete $file_i"
       if [ -f $file ];then             #判断文件是否存在,存在就追加
       echo $file_i >> $file
       else                               #否则复写
       echo $file_i > $file
       fi
       fi
    done

    (3)从一个文件夹读取文件

    #!/bin/bash
    #coding=utf8
    record=/usr/local/oracle/oradata/archived_log/recordarch
    cd /usr/local/oracle/archive/
    for file_i in  `find ./ -mmin -1|grep 'dbf'`;                           #在当前目录下查找包含dbf的在一分钟内生成的文件
    do
       #cp $file_i /usr/local/oracle/oradata/archived_log
       file_changed=$(echo $file_i |awk -F '/' '{print $2}')         #去掉./                   awk用法
       echo $file_changed
       echo $file_changed >> $record
    done

    (4)cut和awk用法,字符串分隔方法。

    start_s=$(echo $start | cut -d '.' -f 1)                #以,分割,-f指打印,1指分割后的第一部分

    time2=$(echo "$time" | awk '{print $1/1000.0}')

    str1=echo $string | cut -d ' ' -f1 #将输入的字符串根据空格分割,取第一个字段(field)

    可以打印动态的位置方法:

    for((i=1;i<=7;i++)) 

    do

    echo $user|cut -d ":" -f$i 

    done 

    将以:分隔的字符串分别输出,这种方法不需要知道个数。

    1. #!/bin/bash  
    2. user=’mark:x:0:0:this is a test user:/var/mark:nologin’  
    3. i=1  
    4. while((1==1))  
    5. do  
    6.         split=`echo $user|cut -d ":" -f$i`  
    7.         if [ "$split" != "" ]  
    8.         then  
    9.                 ((i++))  
    10.                 echo $split  
    11.         else  
    12.                 break  
    13.         fi  
    14. done

    问题:对于’1,2,3,4,5’这样的字符串输出采用,分隔开的1 2 3 4 5

    特征:在字符串中没有空格

    解决方法1

      1. #!/bin/bash  
      2. var=’1,2,3,4,5’  
      3. var=${var//,/ }    #这里是将var中的,替换为空格  
      4. for element in $var   
      5. do  
      6.     echo $element  
      7. done 

    (5) 按行读取和按行删除文件

    写法一:

    ----------------------------------------------------------------------------

    #!/bin/bash

    while read line

    do

        echo $line

    done < filename(待读取的文件)

    ----------------------------------------------------------------------------

    写法二:

    ----------------------------------------------------------------------------

    #!/bin/bash

    cat filename(待读取的文件) | while read line

    do

        echo $line

    done

    ----------------------------------------------------------------------------

    写法三:

    ----------------------------------------------------------------------------

    for line in `cat filename(待读取的文件)`

    do

        echo $line

    done

    ----------------------------------------------------------------------------

    说明:

    for逐行读和while逐行读是有区别的,如:

    $ cat file

    1111

    2222

    3333 4444 555

    $ cat file | while read line; do echo $line; done

    1111

    2222

    3333 4444 555

    $ for line in $(<file); do echo $line; done

    1111

    2222

    3333

    4444

    555

    shell删除某一行

    如果有一个abc.txt文件,内容是:

    aaa

    bbb

    ccc

    ddd

    eee

    fff

    如果要删除aaa,那么脚本可以这样写:

    sed -i '/aaa/d' abc.txt

    如果删除的是一个变量的值,假如变量是var,应该写成:

    sed -i '/'"$var"'/d' abc.txt   注意这里是三个'''


    至于grep -v aaa abc.txt这个方法,是无法将修改的结果写入abc.txt中去的

    (6) 判断一个文件是否存在(重复了,上面有啦)

    if [ -f "filename" ];then      #这里的filename可以加上路径

    ...

    fi

    将一个文件追加到另一个文件

    cat file1 >> file2   #>>追加,>为覆盖

    补充例子:

    #!/bin/sh
    myPath="/var/log/httpd/"
    myFile="/var /log/httpd/access.log"
    #这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
    if [ ! -x "$myPath"]; then
    mkdir "$myPath"
    fi
    #这里的-d 参数判断$myPath是否存在
    if [ ! -d "$myPath"]; then
    mkdir "$myPath"
    fi
    #这里的-f参数判断$myFile是否存在
    if [ ! -f "$myFile" ]; then
    touch "$myFile"
    fi
    #其他参数还有-n,-n是判断一个变量是否是否有值
    if [ ! -n "$myVar" ]; then
    echo "$myVar is empty"
    exit 0
    fi
    #两个变量判断是否相等
    if [ "$var1" = "$var2" ]; then
    echo '$var1 eq $var2'
    else
    echo '$var1 not eq $var2'
    fi

    ========================================
    shell 判断语句

    流程控制 "if" 表达式 如果条件为真则执行then后面的部分: if ....; then
    ....
    elif ....; then
    ....
    else
    ....
    fi
    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…   通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等          -r file     用户可读为真
    -w file     用户可写为真
    -x file     用户可执行为真
    -f file     文件为正规文件为真
    -d file     文件为目录为真
    -c file     文件为字符特殊文件为真
    -b file     文件为块特殊文件为真
    -s file     文件大小非0时为真
    -t file     当文件描述符(默认为1)指定的设备为终端时为真
    ######################################################### 含条件选择的shell脚本
        对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包 括比较运算、判断文件是否存在等。基本的if条件命令选项有: -eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
    -ne —比较两个参数是否不相等
    -lt —参数1是否小于参数2
    -le —参数1是否小于等于参数2
    -gt —参数1是否大于参数2
    -ge —参数1是否大于等于参数2
    -f — 检查某文件是否存在(例如,if [ -f "filename" ])
    -d — 检查目录是否存在
    几 乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ################################################################## 判断文件是否存在 #!/bin/sh
    today=`date -d yesterday +%y%m%d`
    file="apache_$today.tar.gz"
    cd /home/chenshuo/shell
    if [ -f "$file" ];then
    echo "OK"
    else
    echo "error $file" >error.log
    mail -s "fail backup from test" <error.log
    fi

  • 相关阅读:
    GDI+ 实现透明水印和文字
    delphi调用LUA函数来处理一些逻辑
    Delphi 不使用自带模板创建服务
    Delphi在Listview中加入Edit控件
    中文转码器的工作原理_delphi教程
    使用钩子函数[6]
    简单全局HOOK拦截大部分键盘消息
    4个字节就相当于移动一位,原来指针是这样用的
    C#调用Delphi接口(ITest = interface)
    DELPHI 对象的本质 VMT
  • 原文地址:https://www.cnblogs.com/zmlctt/p/3708150.html
Copyright © 2011-2022 走看看