zoukankan      html  css  js  c++  java
  • shell中的if用法

    第一部分  If的用法

    第一种 
    if list then 
      do something here 
    fi 
    当list表述返回值为True(0)时,将会执行"do something here"。

    #!/bin/sh

    myPath="/var/log/httpd/"

    myFile="/var /log/httpd/access.log"

    1.       是否存在并且是否具有可执行权限

    #这里的-x 参数判断$myPath

    if [ ! -x "$myPath"]; then

       mkdir "$myPath"

    fi

    2.       目录是否存在

    #这里的-d 参数判断$myPath是否存在

    if [ ! -d "$myPath"]; then

       mkdir "$myPath"

    fi

    3.       文件是否存在

    #这里的-f参数判断$myFile是否存在

    if [ ! -f "$myFile" ]; then

       touch "$myFile"

    fi

    4.      变量是否有值

    #其他参数还有-n,-n是判断一个变量是否是否有值

    if [ ! -n "$myVar" ]; then

       echo "$myVar is empty"

       exit 0

    fi

    5.       两个变量判断是否相等

    if [ "$var1" = "$var2" ]; then

       echo '$var1 eq $var2'

    else

       echo '$var1 not eq $var2'

    fi

    6.       比较数字的大小

    if [ $df -gt 50 ]
      then
      $df > diskalert
      else
      exit
    fi

    7.       字符串和数字比较大小

    if (d == 0)

     if [ "$D" -eq "0" ] ; then

    if (d != 0)

     if [ "$D" -ne "0" ] ; then

    if (d > 0)

     if [ "$D" -gt "0" ] ; then

    if (d < 0)

     if [ "$D" -lt "0" ] ; then

    if (d <= 0)

     if [ "$D" -le "0" ] ; then

    if (d >= 0)

     if [ "$D" -ge "0" ] ; then

    字符串比较

     if (strcmp(str,”abc”)==0) {

    }

     if [ "$STR" != "abc" ]; then

    8.       If其他用法

    shell脚本中判断环境变量是否存在2007-09-12 20:25

    if [ ! -d "$JAVA_HOME" ]

    then echo "JAVA_HOME not set!"

    else echo "JAVA_HOME:" $JAVA_HOME

    fi

    更紧凑的写法

    [[ -n $JAVA_HOME ]]&&echo exist||echo No exist

    注意-d和-n是不同的,前者判断目录是否存在,后者判断String是否不为空

    -a file

    True if file exists.

    -b file

    True if file exists and is a block special file.

    -c file

    True if file exists and is a character special

    file.

    -d file

    True if file exists and is a directory.

    -e file

    True if file exists.

    -f file

    True if file exists and is a regular file.

    -g file

    True if file exists and is set-group-id.

    -h file

    True if file exists and is a symbolic link.

    -k file

    True if file exists and its ``sticky'' bit is set.

    -p file

    True if file exists and is a named pipe (FIFO).

    -r file

    True if file exists and is readable.

    -s file

    True if file exists and has a size greater than

    zero.

    -t fd True if file descriptor fd is open and refers to a

    terminal.

    -u file

    True if file exists and its set-user-id bit is set.

    -w file

    True if file exists and is writable.

    -x file

    True if file exists and is executable.

    -O file

    True if file exists and is owned by the effective

    user id.

    -G file

    True if file exists and is owned by the effective

    group id.

    -L file

    True if file exists and is a symbolic link.

    -S file

    True if file exists and is a socket.

    -N file

    True if file exists and has been modified since it

    was last read.

    file1 -nt file2

    True if file1 is newer (according to modification

    date) than file2.

    file1 -ot file2

    True if file1 is older than file2.

    file1 -ef file2

    True if file1 and file2 have the same device and

    inode numbers.

    -o optname

    True if shell option optname is enabled. See the

    list of options under the description of the -o

    option to the set builtin below.

    -z string

    True if the length of string is zero.

    -n string

    string True if the length of string is non-zero.

    string1 == string2

    True if the strings are equal. = may be used in

    place of ==.

    string1 != string2

    True if the strings are not equal.

    string1 < string2

    True if string1 sorts before string2 lexicographi?

    cally in the current locale.

    string1 > string2

    True if string1 sorts after string2 lexicographi?

    cally in the current locale.

    arg1 OP arg2

    OP is one of -eq, -ne, -lt, -le, -gt, or -ge.

    These arithmetic binary operators return true if

    arg1 is equal to, not equal to, less than, less

    than or equal to, greater than, or greater than or

    equal to arg2, respectively. Arg1 and arg2 may be

    positive or negative integers.

    第二部分  shell脚本

    1.       删除相同内容的文件

    for file in *        #遍历文件
    do
        if ! [ -f "$file" ] #如果文件存在的话,因为有的文件可能被剔除了.
        then
                echo $file" not exist"
        else
                for i in *
                do   
                    if  [ "$file" != "$i" ]    #如果文件名不同
                    then
                        if  cmp -s $file $i
                        then
                            mv $i ../same/
                        fi
                    fi
                done
                mv $file ../unique/
        fi
    done

    我一共处理4000多个文件,运行的挺慢的,用了1天零2夜才处理完,我汗,竟剔出了近2000,我再汗.

    为了提高效率,后来考虑只对文件大小相同的文件才进行比较.脚本如下:

    for file in *        #遍历文件
    do
        if ! [ -f "$file" ] #如果文件存在的话,因为有的文件可能被剔除了.
        then
                echo $file" not exist"
        else
                 leno=`ls -l $file | awk '{print }'`    #使用ls和awk提出文件大小
                 for i in *
                 do
                    leni=`ls -l $i | awk '{print }'`
                    if  [ "$file" != "$i" -a "$leno" = "$leni" ]    #如果文件名不同,并且文件大小相同
                    then
                        if  cmp -s $file $i
                        then
                            mv $i ../same/
                        fi
                    fi
                done
                mv $file ../unique/
        fi
    done

    2.       判断是不是字符文件

    #!/bin/bash

    #cp.sh

    echo –e “please input filename ”

    read FILENAME

    FILE=$FILENAME

    if [ -c $FILE ]

       then cp $FILENAME /dev

       else echo “ It’s not Character device file”

    fi

  • 相关阅读:
    luoguP1871 对撞机【赛后第一题
    Deep learning-based personality recognition from text posts of online social networks 阅读笔记
    Who Am I? Personality Detection based on Deep Learning for Texts 阅读笔记
    RNN以及LSTM简介
    Compilation failed (return status=1): g++.exe: error: CreateProcess: No such file or directory错误
    Deep Learning-Based Document Modeling for Personality Detection from Text 阅读笔记
    NeuralCoref: python的共指消解工具教程
    NLTK库WordNet的使用方法实例
    matlab使用libsvm入门教程——使用matlab安装配置libsvm以及一个svm分类实例
    原型方法对软件生命周期不同阶段的支持
  • 原文地址:https://www.cnblogs.com/hxu7373/p/3508164.html
Copyright © 2011-2022 走看看