主頁(yè) > 知識(shí)庫(kù) > 用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中的shell腳本

用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中的shell腳本

熱門標(biāo)簽:測(cè)繪地圖標(biāo)注名稱 百度地圖標(biāo)注直線距離 鶴崗400電話申請(qǐng) 德陽(yáng)400電話申請(qǐng) 天津電話外呼系統(tǒng)排名 怎么在百度地圖標(biāo)注公司的位置 智能電銷機(jī)器人有用嗎 外呼電話系統(tǒng)怎么操作 商機(jī)地圖標(biāo)注

今天無(wú)意中發(fā)現(xiàn)一本挺有意思的shell編程的書,是e文的,內(nèi)容是101個(gè)shell案例,堅(jiān)持明天看一個(gè),寫點(diǎn)心得。
下面是例子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

這腳本目的是用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中。


這腳本有幾個(gè)地方值得注意的:
1)它運(yùn)用了函數(shù)嵌套,在checkForCmdInPath里嵌套了in_path函數(shù)。
2)if [ "${var%${var#?}}" = "/" ] 這語(yǔ)句中的${var%${var#?}}是顯示變量的第一個(gè)字符,也可以用${varname:1:1} 或$(echo $var | cut -c1)替代。
3) elif ! in_path $var $PATH ; then 這意思是如果in_path $var $PATH 執(zhí)行結(jié)果不為0的話則
問(wèn)題:
發(fā)現(xiàn)輸入 echo , echo_err, /etco_err 都返回正確結(jié)果,但輸入 /etc/echo_right (存在著執(zhí)行文件但不在PATH中)卻返回found in PATH。我想這腳本還有需要完善的地方。

您可能感興趣的文章:
  • 自動(dòng)化下載并檢測(cè)ftp文件備份的shell腳本
  • shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測(cè)文件變更
  • Shell腳本實(shí)現(xiàn)檢測(cè)Cygwin最快的鏡像站點(diǎn)
  • VBS腳本寫的Windows硬件檢測(cè)工具分享
  • Linux Shell腳本實(shí)現(xiàn)檢測(cè)tomcat
  • Shell腳本實(shí)現(xiàn)檢測(cè)進(jìn)程是否正在運(yùn)行
  • PowerShell腳本實(shí)現(xiàn)檢測(cè)網(wǎng)絡(luò)內(nèi)主機(jī)類型
  • 腳本批量檢測(cè)網(wǎng)站是否存活

標(biāo)簽:自貢 武漢 優(yōu)質(zhì)小號(hào) 丹東 鎮(zhèn)江 滁州 六盤水 百色

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中的shell腳本》,本文關(guān)鍵詞  用來(lái),檢測(cè),輸入,的,選項(xiàng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中的shell腳本》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于用來(lái)檢測(cè)輸入的選項(xiàng)$1是否在PATH中的shell腳本的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章