现在你已经看到shell脚本中各种循环的使用方法,来看一些实际应用的例子吧。循环是对系统数据进行迭代的常用方法,无论是目录中的文件还是文件中的数据。下面的一些例子演示了如何使用简单的循环来处理数据。
1.1 查找可执行的文件
当你从命令行中运行一个程序你的时候,linux系统会搜索一系列目录来查找对应的文件,这些目录被定义在环境变量PATH中。如果你想找出系统中有哪些可执行文件可供使用,只需要扫描PATH环境变量中所有的目录就行了。如果要徒手查找的话,就得花点时间了。不过我们可以编写一个小小的脚本,轻而易举地搞定这件事。
首先是创建一个for循环,对环境变量PATH中的目录进行迭代。处理的时候别忘了设置IFS分隔符。
IFS=:
for folder in $PATH
do
现在你已经将各个目录存在在了变量¥folder中,可以使用另一个for循环来迭代特定目录的所有文件。
for file in $folder/*
do
最后一步是检查各个文件是否具有可执行权限,你可以使用if-then测试功能来实现。
if [ -x $file ]
then
echo " $file"
fi
好了,搞定了!将这些代码片段组合成脚本就行了。
#! /bin/bash
# finding files in the PATH
IFS=:
for folder in $PATH
do
echo "$folder:"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
[root@ecs robin]# ./findforx.sh | more
/usr/lib64/qt-3.3/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/local/bin/docker-compose
/usr/sbin:
/usr/sbin/accessdb
/usr/sbin/addgnupghome
/usr/sbin/addpart
/usr/sbin/adduser
/usr/sbin/agetty
/usr/sbin/alternatives
/usr/sbin/anacron
/usr/sbin/applygnupgdefaults
/usr/sbin/arp
/usr/sbin/arpd
/usr/sbin/arping
/usr/sbin/atd
/usr/sbin/atrun
/usr/sbin/audispd
/usr/sbin/auditctl
/usr/sbin/auditd
/usr/sbin/augenrules
/usr/sbin/aureport
/usr/sbin/ausearch
/usr/sbin/authconfig
/usr/sbin/authconfig-tui
...
输出显示了在环境变量PATH所包含的所有目录中找到的全部执行文件,数量真是不少!