shell脚本测试变量是否为空,测试文件是否存在,sed修改配置文件参数,分支语句
阅读原文时间:2023年07月08日阅读:1

1. 基本的几个变量

  • 使用$?获取最近一次的执行结果
  • 使用$#获取传递的参数个数,类似C语言中的int argc;
  • 使用$@获取所有的传参,类似C语言的char **argv

2. 获取一个命令的结果是否为空

场景:在某个目录查找是否包含某个文件

一般使用双引号("")将变量括起来。将多个变量化为一个字符串,否则测试时可能会有warning


#########################################################################
# File Name: common_usages.sh
# Author: Toney Sun
# mail: vip_13031075266@163.com
# Created Time: 2020年04月20日 星期一 15时03分23秒
#########################################################################
#!/bin/bash

<<AAA
    获取一个命令的结果是否为空
    例如:
        在某个目录查找是否包含某个文件
    一般使用双引号("")将变量括起来。将多个变量化为一个字符串,否则测试时可能会有warning
AAA
isNull(){
    local result
    DIR="/mnt/hgfs/em嵌入式学习记录/shell/"
    #result=`ls | grep shell.txt`
    result=`ls ../`
    #echo "${result}"
    #./common_uages.sh: line 21: [: too many arguments
    if [ -z "$result" ];
    then
        echo "Can't find shell.txt in $PWD !!!"
    else
        echo "shell.txt is in current path."
    fi

    #上述命令可以简化为下面的方式:
    [ -z "$result" ] && echo "Can't find shell.txt" || echo "shell.txt is in current path."
}

3. 检测文件系统中是否存在某个文件

场景: 需要解压缩一个tar包,首先得确认tar包存在;

#########################################################################
# File Name: common_usages.sh
# Author: Toney Sun
# mail: vip_13031075266@163.com
# Created Time: 2020年04月20日 星期一 15时03分23秒
#########################################################################
#!/bin/bash

<<BBB
    检测文件系统中是否存在某个文件
    例如:
        需要解压缩一个tar包,首先得确认tar包存在;
BBB
isFileExist(){
    FILE="linux-2.6.24.tar.bz2"
    [ -e $FILE ] && echo "$FILE is exist." || echo "$FILE is not exist!!!"

    DST_PATH="/tmp/linux2.6.24"
    #如果想要解压到”/tmp/linux-2.6.24目录“,那么我们首先需要检测该目录是否存在
    #如果存在,删除该目录下的所有内容;如果不存在则创建该目录
    [ ! -e ${DST_PATH} ] && echo "${DST_PATH} not exist..."

    [ -e ${DST_PATH} ] && rm -f ${DST_PATH}/* || mkdir ${DST_PATH}
}

3. 使用sed命令修改一整行内容

场景: 修改配置文件的值

#########################################################################
# File Name: common_usages.sh
# Author: Toney Sun
# mail: vip_13031075266@163.com
# Created Time: 2020年04月20日 星期一 15时03分23秒
#########################################################################
#!/bin/bash

<<CCC
    使用sed命令修改一整行内容
    例如:
        修改配置文件的值
CCC
modifyConfig(){
    FILE="common_usage.log"
    version="linux-4.1.23"
    #正常的做法-->不可行
    #以”REVISION=“开始的行全部替换为”REVISION=$version“
    #sed -i 's/REVISION=.*$/REVISION=$version/' $FILE

    #可行办法
    sed -i "s/REVISION=.*$/REVISION=$version/" $FILE
}

3. 检测文件系统中是否存在某个文件

场景: 需要解压缩一个tar包,首先得确认tar包存在;

#########################################################################
# File Name: common_usages.sh
# Author: Toney Sun
# mail: vip_13031075266@163.com
# Created Time: 2020年04月20日 星期一 15时03分23秒
#########################################################################
#!/bin/bash

<<BBB
    检测文件系统中是否存在某个文件
    例如:
        需要解压缩一个tar包,首先得确认tar包存在;
BBB
isFileExist(){
    FILE="linux-2.6.24.tar.bz2"
    [ -e $FILE ] && echo "$FILE is exist." || echo "$FILE is not exist!!!"

    DST_PATH="/tmp/linux2.6.24"
    #如果想要解压到”/tmp/linux-2.6.24目录“,那么我们首先需要检测该目录是否存在
    #如果存在,删除该目录下的所有内容;如果不存在则创建该目录
    [ ! -e ${DST_PATH} ] && echo "${DST_PATH} not exist..."

    [ -e ${DST_PATH} ] && rm -f ${DST_PATH}/* || mkdir ${DST_PATH}
}

4. shell脚本中的分支语句

场景: 根据不同的参数执行不同的操作;获取函数返回值

#########################################################################
# File Name: common_usages.sh
# Author: Toney Sun
# mail: vip_13031075266@163.com
# Created Time: 2020年04月20日 星期一 15时03分23秒
#########################################################################
#!/bin/bash

condition(){
    if [ $# -eq 1 ];
    then
        case "$1" in
            clean)
                echo "make clean..."
                return 0
                ;;
            all.clean)
                echo "make all.clean..."
                return 0
                ;;
            *)
                echo "make default..."
                return 1
                ;;
        esac
    elif [ $# -eq 2 ];
    then
        echo "Two parameters...."
        return 1
    else
        cat <<-USAGE
            Usage: $0 [clean|clean.all] [para1 para2]
USAGE
    fi

}

condition asdf
[ $? -eq 0 ] && echo "return sucess!!!" || echo "failed!!!"