前言
当你从命令中运行一个程序的时候,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的值设置为冒号。