#!/bin/bash

in_path()
{

cmd=$1        ourpath=$2         result=1

#将默认的IFS(分隔符)为空格,这里先保留原本的给变量oldIFS,然后将IFS设置为:,这样做的目的是在 for 循环的时候我们会使用到$PATH的文件,他们格式是/usr/local/bin:/usr/bin:/usr/local/sbin,所以才需要将IFS这个全局变量给给成 :,在函数结束之后在改回去。

oldIFS=$IFS   IFS=":"

   for directory in “$ourpath”
   do
     if [ -x $directory/$cmd ] ; then
       result=0      # if we're here, we found $cmd in $directory
     fi
   done

   IFS=$oldIFS
   return $result
 }

 checkForCmdInPath()
 {
   var=$1

   if [ "$var" != "" ] ; then

#蓝色部分是判断语句,如果蓝色部分成立,执行红色部分返回红色部分结果。如果蓝色部分不成立,执行紫色部分,返回紫色部分结果。
     if [ "${var:0:1}" = "/" ] ; then
       if [ ! -x $var ] ; then
         return 1
       fi
     elif !  in_path $var "$PATH" ; then
       return 2
     fi
   fi
}
#  $# 的意思是看你输如的几个参数。例如: echo   $1 $2...;这条  $# -ne 1 的意思是判断你输入的参数是否不等于1,如果不等于1执行蓝色部分。等于1跳出。
if [ $# -ne 1 ] ; then
  echo "Usage: $0 command" >&2 ; exit 1
fi
#这就是调用我们上面写的函数了,只接受一个参数$1,判断参数执行的返回值,1,2,3输出不同的结果。 参考上面的return 0, return 1,return 2 。
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

shell脚本实战笔录-在PATH中查找程序的更多相关文章

  1. shell脚本实现读取一个文件中的某一列,并进行循环处理

    shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...

  2. Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...

  3. shell 脚本实战笔记(2)--环境变量PATH的恩怨情仇

    在linux环境下, 相信大家对环境变量PATH, 多多少少有所接触, 这边讲讲PATH的在linux的前世因缘. 先讲讲一个列子 假如我们在为一个新的应用配置其PATH路径中时,  不小心忽略了原先 ...

  4. 将 shell 脚本打包到 rpm 包中

    下以操作最好在虚拟机上操作:如 Docker 最方便了 1. 安装 rpmbuild yum -y install rpmbuild  rpmdevtools -y 2. 生成打包路径 使用 rpmd ...

  5. shell脚本:Kill掉MySQL中所有sleep的client线程

    分享一个shell脚本,实现kill掉mysql中所有的sleep状态的client线程,有需要的朋友,可以参考研究下. 文件名称:killsleep.sh. #It is used to kill ...

  6. shell 脚本实战笔记(10)--spark集群脚本片段念念碎

    前言: 通过对spark集群脚本的研读, 对一些重要的shell脚本技巧, 做下笔记. *). 取当前脚本的目录 sbin=`dirname "$0"` sbin=`cd &quo ...

  7. [linux] shell脚本编程-统计日志文件中的设备号发通知邮件

    1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...

  8. Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值

    本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...

  9. shell脚本的if语句,判断某程序是否存在,不存在启动该程序!

    想必大家都知道 "如果......那么......" 这种语法的应用吧! 当然呢,linux下对于这种用法也是有所考虑的,很多时候我们都需要写一个shell脚本,难免会避免if语句 ...

  10. shell 脚本实战笔记(1)--source/fork/exec的区别

    在linux shell编程中, 随着脚本处理规模的变大, 会嵌套调用子进程. 但父进程以不同的方式调用子进程, 其结果和背后的机制不尽相同.这边就简单描述下source/fork/exec调用子进程 ...

随机推荐

  1. 【学习笔记】C/C++ 设计模式 - 工厂模式(下)

    介绍说明 这篇笔记承接<[学习笔记]C/C++ 设计模式 - 工厂模式(上)>文章,主要记录 "抽象工厂设计模式" 的学习笔记,上一次是以音频播放器来作为例子,主要是想 ...

  2. (Newtonsoft)Json增删改查

    public static class JsonHelper { #region 字段 private static string json; public static string path; # ...

  3. python自动发布-优化版本

    import sys import time import os import paramiko from pygments.lexers import shell baseconfig = { &q ...

  4. linux-基础及相关软件安装

    1.linux常见岗位 自动化运维.容器运维.DBA ps:会的越多给的就越多!!! """ IDC运维:机房运维员 不要做!!! """ ...

  5. STM32F4寄存器初始化系列:GPIO

    1 static void GPIO_Init(void) 2 { 3 4 //sound 5 GPIO_Set(GPIOB,PIN4,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO ...

  6. 学习Java Day18

    一.面向对象(面向过程) 1. 面向对象 找对象(封装了过程)来干. 例如:洗衣服(洗衣机就是对象). 2. 面向对象思想特点 是一种更符合我们思想习惯的思想. 可以将复杂的事情简单化. 将我们从执行 ...

  7. Zstack私有云平台运行实践

    很高兴昨天加了大名鼎鼎的杰杰站长的微信,系统运行的怎么样,一定不能只是给力两个字完事,下面就上具体的: 经过这几年的运行费和预研经费的支持,组里除了在线的几台服务器外,慢慢离线也积攒了几台用作调试和做 ...

  8. C++梳理

    1.基础篇 1.C++ 中的四种智能指针 为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况的发⽣.使⽤智能指针可以很⼤程度上的避免这个 ...

  9. rem自动计算

    写法一: //rem自动计算 (function (designWidth, maxWidth, viewWidth) { var doc = document, win = window, docE ...

  10. 优化 Win11 资源管理器打开文件夹速度

    打开"高级系统设置",点击"性能"设置,性能选项中勾选如上图选中的项,可以一定程度上提升 Win11 资源管理器打开文件夹的速度: "窗口内动画控件和 ...