zoukankan      html  css  js  c++  java
  • 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]

  • 相关阅读:
    JNA 简单示例
    WPF中使用VisiFire制作chart报表
    ActiveMQ CMS 开发环境编译
    c# 程序打包发布
    WPF 程序未处理异常 的捕获
    制作简易浏览器
    C#.NET 支持文件拖放
    C/S代码一例
    Delphi 2010 TStreamReader 和TStreamWriter
    Json数据使用及学习方法
  • 原文地址:https://www.cnblogs.com/chenri/p/13172771.html
Copyright © 2011-2022 走看看