shell脚本实战笔录-在PATH中查找程序
#!/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中查找程序的更多相关文章
- shell脚本实现读取一个文件中的某一列,并进行循环处理
shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...
- Shell脚本实现每个工作日定时执行指定程序
我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...
- shell 脚本实战笔记(2)--环境变量PATH的恩怨情仇
在linux环境下, 相信大家对环境变量PATH, 多多少少有所接触, 这边讲讲PATH的在linux的前世因缘. 先讲讲一个列子 假如我们在为一个新的应用配置其PATH路径中时, 不小心忽略了原先 ...
- 将 shell 脚本打包到 rpm 包中
下以操作最好在虚拟机上操作:如 Docker 最方便了 1. 安装 rpmbuild yum -y install rpmbuild rpmdevtools -y 2. 生成打包路径 使用 rpmd ...
- shell脚本:Kill掉MySQL中所有sleep的client线程
分享一个shell脚本,实现kill掉mysql中所有的sleep状态的client线程,有需要的朋友,可以参考研究下. 文件名称:killsleep.sh. #It is used to kill ...
- shell 脚本实战笔记(10)--spark集群脚本片段念念碎
前言: 通过对spark集群脚本的研读, 对一些重要的shell脚本技巧, 做下笔记. *). 取当前脚本的目录 sbin=`dirname "$0"` sbin=`cd &quo ...
- [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 ...
- Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...
- shell脚本的if语句,判断某程序是否存在,不存在启动该程序!
想必大家都知道 "如果......那么......" 这种语法的应用吧! 当然呢,linux下对于这种用法也是有所考虑的,很多时候我们都需要写一个shell脚本,难免会避免if语句 ...
- shell 脚本实战笔记(1)--source/fork/exec的区别
在linux shell编程中, 随着脚本处理规模的变大, 会嵌套调用子进程. 但父进程以不同的方式调用子进程, 其结果和背后的机制不尽相同.这边就简单描述下source/fork/exec调用子进程 ...
随机推荐
- 【随笔记】Tina 系统的 ADB、声卡、网卡、串口多路共存
全志 Tina 系统的 USB Gadget 配置方法,随笔记录,实测为 R311 平台,其它平台应该通用. 一.配置内核 二.编译驱动并加载 # UAC insmod usb_f_uac1.ko ...
- Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
️URL: https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/ ...
- linux-基础及相关软件安装
1.linux常见岗位 自动化运维.容器运维.DBA ps:会的越多给的就越多!!! """ IDC运维:机房运维员 不要做!!! """ ...
- catkin_make设置编译并行数
export ROS_PARALLEL_JOBS='-j2 -l2'
- Vue框架:6、Vue组件间通信,动态组件,插槽,计算属性,监听属性
目录 前端开发之Vue框架 一.Vue组件间通信 1.组件间通讯父传子 2.组件间通讯子传父 3.ref属性 二.动态组件 1.不使用动态组件 2.使用动态组件 3.keep-alive保持组件不销毁 ...
- 【Go并发编程】Goroutine的基本使用
goroutine是什么 goroutine即协程,使用go关键字开启一个协程异步执行代码. 注意,main函数也是个goroutine. 基本使用 使用go执行子任务,会交替执行(和时间片一样). ...
- Cesium 椭球大地测量EllipsoidGeodesic(十二)
首先发现一个问题,这段代码会报错,原因是"DeveloperError: Expected value to be greater than or equal to0.0125, actua ...
- [USACO06NOV] Round Numbers S
题目 \(\texttt{[USACO06NOV] Round Numbers S}\) 分析 数位 \(dp\) 入门题 一般我们需要当前位置 \(pos\),有无前导零 \(lead\),高位标记 ...
- 微信小程序的全局弹窗以及全局实例
全局组件 微信小程序组件关系中,父组件使用子组件需要在父组件index.json中引入子组件,然后在父组件页面中使用,这种组件的对应状态是一对一的,一个组件对应一个页面.如果有一个全局弹窗(登录),那 ...
- 了解舵机以及MG996R的控制方法
了解舵机以及MG996R的控制方法 1.舵机基础知识: 舵机是遥控航空.航天模型控制动作,改变方向的重要组成部件,舵机是一种位置(角度)伺服的驱动器. 舵机主要适用于那些需要角度不断变化并可以保持的控 ...