测试过程中用shell的地方_用来检测输入的选项$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。我想这脚本还有需要完善的地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值