用来检测输入的选项$1是否在PATH中的shell脚本_linux 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。我想这脚本还有需要完善的地方。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索检测输入
shell脚本中加入path、shell脚本 path、shell脚本用来做什么、shell 脚本 选项、shell path,以便于您获取更多的相关知识。

时间: 2024-09-28 17:23:28

用来检测输入的选项$1是否在PATH中的shell脚本_linux shell的相关文章

自动化下载并检测ftp文件备份的shell脚本_linux shell

实现代码: #!/bin/bash #ftime0=$(ll /root/hbshell/down.txt | awk '{print $7}') #ftime1=$(ll /root/hbshell/down.txt | awk '{print $7}') touch /root/hbshell/down.txt while : do if [[ /root/hbshell/down.txt -nt /root/hbshell/down_cp.txt ]] then user=root pas

验证用户输入的参数合法性的shell脚本_linux shell

今天这个例子是 用来验证用户输入的参数的合法性的,程序并不复杂,如下所示: #!/bin/sh # validAlphaNum - Ensures that input consists only of alphabetical # and numeric characters. validAlphaNum() { # Validate arg: returns 0 if all upper+lower+digits, 1 otherwise # Remove all unacceptable

判断输入的日期是否正确的shell脚本_linux shell

今儿个讲得是判断输入的日期是否正确,有利用到我们之前03这个例子中的函数 下面是代码 #!/bin/sh # valid-date -- Validates a date, taking into account leap year rules. exceedsDaysInMonth() { case $(echo $1|tr '[:upper:]' '[:lower:]') in jan* ) days=31 ;; feb* ) days=28 ;; mar* ) days=31 ;; apr

检测网段IP使用情况的shell脚本_linux shell

复制代码 代码如下: #!/bin/bash#main---network=192.168.1ping_count=3IP=1:>IP_use:>IP_idle:>ping_actionecho "`date "+%Y%m%d %H:%M:%S"`----->脚本开始执行......"while [ $IP -lt 255 ]dohost=$network.$IPecho "-------->开始检测$host服务器通迅是否正

一个可交互的并发ping检测脚本_linux shell

复制代码 代码如下: #!/bin/bash#********************************##2013-01-11 17:00:00 wanggy exp  ##note:ping monitor               ##********************************#set -uping_fun(){    d_network=192.168.1    echo -n "input the network(default $d_network):&

Linux Shell脚本实现检测tomcat_linux shell

Linux Shell脚本检测tomcat并自动重启 后台运行命令 sh xxx.sh & 查看后台任务:jobs 召唤到前台:fg jobs编号 可以删掉while循环的代码放到crontab里面定时执行,可以将脚本直接后台运行, #!/bin/bash while [ true ] do url="http://www.jb51.net/"; httpOK=`curl --connect-timeout 10 -m 60 --head --silent $url | awk

JS检测输入字符是否包含非法字符的示例代码

 本篇文章主要是对JS检测输入字符是否包含非法字符的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: function checks(t){    szMsg="[#_%&'/",;:=!^]";    alertStr="";    for(i=1;i<szMsg.length+1;i++){     if(t.indexOf(szMsg.substring(i-1,i))>-1){      alertS

《HTML5 开发实例大全》——1.28 自动检测输入的拼音是否正确

1.28 自动检测输入的拼音是否正确 实例说明 在HTML 5 中,使用属性"spellcheck"可以检测文本框或输入框中输入的拼音或语法是否正确,该属性的值为布尔值"true"或"false".如果为"true",则检测对应输入框中的语法:反之,则不检测. 在本实例中,分别创建两个< textarea >输入框元素.第一个元素将"spellcheck"属性设置为"true"

检测网段在线主机的shell脚本

作业四: 写一个脚本: 实现ping C类网段,B类网段和A类网段内的所有主机: 网段地址让用户输入,而且通过脚本判断网段类型: #!/bin/bash #Author: MOS #Script name: funPing.sh #Date & Time: 2012-10-09/21:53:09 #Version: 1.0.1 #Description: # #定义C类网段处理函数 net_C(){ #定义统计不在线IP数量的变量 declare -i Fail=0 #生成C类网的最后位IP,循