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的值设置为冒号。

在这里插入图片描述

扫二维码关注微信公众号,获取技术干货

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值