Linux系统实现一个everything程序

以下功能代码实现并非原创,只不过在源码的基础弄明白整个功能如何运行,代码比较简单,作为基础学习提高下技术。

源码解读

#!/bin/bash


## help function,操作说明

function helpu {
	echo " "
	echo "Fuzzy search for filename."
	# $0 脚本本身的名称   
	echo "$0 [--match-case|--path] filename"
	echo " "
	exit
}

## set variables

MATCH="-iname"
SEARCH="."

## parse options,匹配命令

while [ True ]; do
# -o 布尔运算符,有一个表达式为true,则返回true
if [ "$1" = "--help" -o "$1" = "-h" ]; then
	helpu
elif [ "$1" = "--match-case" -o "$1" = "-m" ]; then
	MATCH="-name"
	# shift 命令用于对参数的移动(左移),在不知道传入参数个数的情况下依次
	# 遍历每个参数,然后进行相应的处理
	shift 1
elif [ "$1" = "--path" -o "$1" = "-p" ]; then
	# ${} 用于变量替换,会比较精确的界定变量名词的范围
	# 这里当命令行参数是 --path ~ 或者 -p ~,把家目录 ~ 赋值给了 SEARCH
	# 代替 . 当前目录
	SEARCH="${2}"
	shift 2
else
	break
fi
done

## sanitize input filenames
## create array, retain spaces

# ${@} 引用变量,同 $@(传给脚本的所有参数列表),可读性比 $@ 好
ARG=( "${@}" )
# -e 若指令返回值不为0,则退出shell
set -e

## catch obvious input error

# "X$ARG" = "X",判断字符串是否相等,加上 X,是为了防止 $ARG 为空时
# 出现语法错误。也就是说,当查找的内容为空时,调用 helpu 函数
if [ "X$ARG" = "X" ];then
	helpu
fi

## preform search

for query in ${ARG[*]}; do
	# 实际真正查询的命令:find ,可搜索多个值
	# 例如:$ find ~ -name *scr* *bin*
	#      $ /usr/bin/find ~ -name *scr*
	/usr/bin/find "${SEARCH}" "${MATCH}" "*${ARG}*"
done

(原文参考)[https://mp.weixin.qq.com/s/yPN4sv8-tbUIRUR4XFf8Mw]

posted @ 2020-06-21 16:12  chenzy01  阅读(533)  评论(0编辑  收藏  举报