#!/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. SkyWalking安装及SkyApm运行(.net和java)

    一.部署SkyWalking 1.下载SkyWalking包(版本为6.6.0) 下载地址为:http://skywalking.apache.org/downloads/ 2.修改数据库配置 默认为 ...

  2. Vue 03 VisualStudioCode 搭建一个Vue 框架 的详细流程

    转:https://blog.csdn.net/A_awen/article/details/122345082 1 下载VisualStudioCode 1.1 官网下载地址 https://cod ...

  3. C++练习8 常量的说明

    const用来声明常量,const的位置可以看出其修饰的是哪一部分 1 #include <iostream> 2 using namespace std; 3 int main() 4 ...

  4. Xlight安装与使用

    Xlight安装与使用 一.Xlight安装 下载Xlight安装包,点击安装,默认就可以,下一步 点击左上角增加虚拟服务器,IP地址为本机服务器IP地址 右键点击新添加的虚拟服务器,点击虚拟服务器操 ...

  5. LG P3803 【模板】多项式乘法

    \(\text{FFT}\) 模板 #include <cstdio> #include <iostream> #include <cmath> #define r ...

  6. 软件设计原则(Principles)

    设计模式的从许多优秀的软件中总结出来的 , 使用设计模式能够实现可复用.可维护.开发人员之间方便沟通设计和理解代码. Tips 对于模式的使用 , 不能拘泥于格式 , 事实上根据需要模式是可以演化的 ...

  7. RocketMQ - 消费者Rebalance机制

    客户端是通过Rebalance服务做到高可靠的.当发生Broker掉线.消费者实例掉线.Topic 扩容等各种突发情况时,消费者组中的消费者实例是怎么重平衡,以支持全部队列的正常消费的呢? Rebal ...

  8. 基于C++的OpenGL 02 之着色器

    1. 概述 本文基于C++语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于C++的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 (cnbl ...

  9. LeetCode-2 两数相加题解

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers 题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位 ...

  10. Linux新手渣渣上路史

    Linux新手渣渣上路史 时至2022年,IT行业的迅速发展大家也有目共睹,IT行业在社会的发展中起着举足轻重的作用.其中一角Linux系统,从诞生到开源,再到现在受大众的欢迎,是一个很好的例子.Li ...