Linux shell 查找可执行文件

前言

当你从命令中运行一个程序的时候,Linux系统会搜索一系列目录查找可执行文件。-x 比较是判断特定的文件是否有可执行权限的一个简单方法。

检查文件是否可以执行

当你在shell脚本中运行大量的脚本,它就会发挥作用。下面来运行一个例子,检查当前文件是否存在,并可执行。

#! /bin/bash

if [ -x test1.sh ]
then
   echo "You can the script:"
   ./test1.sh
else
   echo "Sorry,You are unable to execute the script"
fi

输出结果

在这里插入图片描述
示例中shell脚本用 -x比较来测试是否有权限执行 test1.sh脚本,如果有权限(chmod u+x test1.sh) 。会运行这个脚本。

查找可执行文件

前言也说过,命令在运行一个程序的时候,Linux系统会搜索查找对应的文件。这些目录被定义在环境变量PATH中。如果要想找出系统中有哪些可执行文件供使用,只要扫描PATH环境变量中所有目录就就行,如果要徒手查找的话,时间上会非常耗时,所以,这点上,可以考虑写一个小脚本,轻而易举的搞定这件事。

首先需要创建一个 for循环,对环境变量PATH中的目录进行迭代。这个时候可以使用IFS设置分隔符。

IFS=:
for folder in $PATH

现在将PATH各个目录中变量存放在$folder中,可以在使用另一个for循环迭代特定的目录中的所有文件。

for file in $folder/*

最后就是最重要的一个,就是检查各个文件是否具有有执行权限:

if [ -x $file ]
then
  echo " $file"
fi  

下面来组合完整的脚本:

#! /bin/bash

#finding file in the PATH

IFS=:
for folder in $PATH
do
   echo "$folder:"
   for file in $foler/*    
   do
      if [ -x $file ]
      then
          echo "   $file"
      fi
   done  
done

输出结果:

在这里插入图片描述输出显示在环境变量PATH所包含的所有目录中找到的全部可执行文件,应输出可执行文件较多,所以只截屏一小部分进行参考。

IFS ( 内部字段分隔符 ) 提示

在处理代码量较大的文件中,可以在一个地方需要修改IFS的值,然后忽略这次修改,在脚本的其他地方继续沿用IFS的默认值。

还有其他一些IFS环境变量的巧妙用法,假定你要变量一个文件中用冒号分隔的值,比如:PATH中的目录、/etc/passwd文件中。你要做的就是将IFS的值设置为冒号。

发布了71 篇原创文章 · 获赞 42 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chen1415886044/article/details/103222422