Shell脚本
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 AAAisNull(){ 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包存在; BBBisFileExist(){ 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命令修改一整行内容 例如: 修改配置文件的值 CCCmodifyConfig(){ 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包存在; BBBisFileExist(){ 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/bashcondition(){ 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!!!"