• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    用来检测输入的选项$1是否在PATH中的shell脚本

    今天无意中发现一本挺有意思的shell编程的书,是e文的,内容是101个shell案例,坚持明天看一个,写点心得。
    下面是例子001:

    #!/bin/sh
    # inpath - Verifies that a specified program is either valid as is,
    #  or that it can be found in the PATH directory list.
    
    in_path()
    {
     # Given a command and the PATH, try to find the command. Returns
     # 0 if found and executable, 1 if not. Note that this temporarily modifies
     # the IFS (input field separator) but restores it upon completion.
    
     cmd=$1    path=$2     retval=1
     oldIFS=$IFS  IFS=":"
    
     for directory in $path
     do
      if [ -x $directory/$cmd ] ; then
       retval=0   # if we're here, we found $cmd in $directory
      fi
     done
     IFS=$oldIFS
     return $retval
    }
    
    checkForCmdInPath()
    {
     var=$1
    
     # The variable slicing notation in the following conditional
     # needs some explanation: ${var#expr} returns everything after
     # the match for 'expr' in the variable value (if any), and
     # ${var%expr} returns everything that doesn't match (in this
     # case, just the very first character. You can also do this in
     # Bash with ${var:0:1}, and you could use cut too: cut -c1.
    
     if [ "$var" != "" ] ; then
      if [ "${var%${var#?}}" = "/" ] ; then
       if [ ! -x $var ] ; then
        return 1
       fi
      elif ! in_path $var $PATH ; then
       return 2
      fi
     fi
    }
    
     
    if [ $# -ne 1 ] ; then
     echo "Usage: $0 command" >2 ; exit 1
    fi
    
    checkForCmdInPath "$1"
    case $? in
     0 ) echo "$1 found in PATH"         ;;
     1 ) echo "$1 not found or not executable"  ;;
     2 ) echo "$1 not found in PATH"       ;;
    esac
    
    exit 0

    这脚本目的是用来检测输入的选项$1是否在PATH中。


    这脚本有几个地方值得注意的:
    1)它运用了函数嵌套,在checkForCmdInPath里嵌套了in_path函数。
    2)if [ "${var%${var#?}}" = "/" ] 这语句中的${var%${var#?}}是显示变量的第一个字符,也可以用${varname:1:1} 或$(echo $var | cut -c1)替代。
    3) elif ! in_path $var $PATH ; then 这意思是如果in_path $var $PATH 执行结果不为0的话则
    问题:
    发现输入 echo , echo_err, /etco_err 都返回正确结果,但输入 /etc/echo_right (存在着执行文件但不在PATH中)却返回found in PATH。我想这脚本还有需要完善的地方。

    您可能感兴趣的文章:
    • 自动化下载并检测ftp文件备份的shell脚本
    • shell脚本实现实时检测文件变更
    • Shell脚本实现检测Cygwin最快的镜像站点
    • VBS脚本写的Windows硬件检测工具分享
    • Linux Shell脚本实现检测tomcat
    • Shell脚本实现检测进程是否正在运行
    • PowerShell脚本实现检测网络内主机类型
    • 脚本批量检测网站是否存活
    上一篇:验证用户输入的参数合法性的shell脚本
    下一篇:linux shell实现转换输入日期的格式
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    用来检测输入的选项$1是否在PATH中的shell脚本 用来,检测,输入,的,选项,