日常编写shell脚本的一些知识整理 - Mr.Ding

日常编写shell脚本的一些知识整理

天天记事 1035 / 2020-04-23 12:17:20

1. 条件判断

语法规则

if ... fi 语句
if ... else ... fi 语句
if ... elif ... else ... fi 语句

1). if ... fi 语句

if [ expression ]
then
当条件/表达式 expression 为真(true)时,此处会被执行
fi

或者

if [ expression ]; then
当条件/表达式 expression 为真(true)时,此处会被执行
fi

注意:if和fi必须配对,expression 和方括号([ ])之间必须有空格

例如:

num1=10
num2=10
if [ $num1 == $num2 ]; then
echo $num1 和 $num2 是相等的
fi

结果

10 和 10 是相等的

2). if ... else ... fi 语句

if [ expression ]
then
当条件/表达式 expression 为真(true)时,此处会被执行
else
当条件/表达式 expression 为假(false)时,此处会被执行
fi

if [ expression ]; then
当条件/表达式 expression 为真(true)时,此处会被执行
else
当条件/表达式 expression 为假(false)时,此处会被执行
fi

注意:if和fi必须配对,expression 和方括号([ ])之间必须有空格

3). if ... elif ... fi 语句 或者 if ... elif ... elif ... else ... fi

if [ expression1 ]; then
当条件/表达式 expression1 为真(true)时,此处会被执行
elif [ expression2 ]; then
当条件/表达式 expression2 为真(true)时,此处会被执行
else
上述条件均不满足是,此处会被执行
fi

例如:

sex=$1
if [ $sex == 1 ]; then
echo 先生
elif [ $sex == 0 ]; then
echo 女士
else
echo 保密
fi

注意:例子中的$1表示执行此脚本时,传入的第一个参数;更多条件可无限制使用elif [ expression ]; then 语法结构

例如:

sex=$1
if [ $sex == "男" ]; then
echo Male
elif [ $sex == "女" ]; then
echo Female
else
echo Unknown
fi

2. 一个查找文件的例子

#!/bin/sh
curdir=`pwd`
myloc=""
fileext=$2

if [ -n "$1" ]; then
if [ "$1" == "." ]; then
myloc="$curdir/"
elif [ "$1" == "./" ]; then
myloc="$curdir/"
elif [[ $1 == /* ]]; then
if [[ -d "$1" ]]; then
if [[ $1 == */ ]]; then
myloc="$1"
else
myloc="$1/"
fi
fi
else
if [[ -d "$1" ]]; then
if [[ $1 == */ ]]; then
myloc="$curdir/$1"
else
myloc="$curdir/$1/"
fi
fi
fi
else
myloc="$curdir/"
fi

function show_dir_files() {
filetype="$2"
for file in `ls $1`; do
if [ -d $1$file ]; then
show_dir_files "$1$file/" "$filetype"
elif [[ $file == $2 ]]; then
echo $1$file
fi
done
}

if [[ -z "$fileext" ]]; then
fileext="*"
fi

if [[ -n $myloc ]]; then
show_dir_files "$myloc" "$fileext"
fi

保存到$PATH目录下,并命名为finder,同时chmod为755,执行脚本:

打开命令窗口,输入:

finder . "*.mp4"

查找当前目录下(含子目录)的全部MP4文件,

注意后面的通配符需要用双引号括起来!!!

注意后面的通配符需要用双引号括起来!!!

注意后面的通配符需要用双引号括起来!!!

重要的事情说三遍!!!

如果要展示全部类型文件(不含隐藏文件),可只留下路径即可,如:

finder /Users/mr.ding/workspace/upload



shell