我的目录名为dir/sub_dir
,在该目录中我有*.c
个文件:
add_num.c
sub_num.c
mul_num.c
div_num.h
exp.txt
如果我发现任何文件,我必须在If语句中使用它。喜欢
If any name is found means ok Else no files found
如何在If语句中使用?
答案 0 :(得分:0)
您可以根据是否找到与find
匹配的文件,使用'*.c'
或提供可用退货的任何其他实用程序。 ls
同样有效:
if ls "$dir"/*.c >/dev/null 2>&1; then
echo "have .c files"
else
echo "no .c files"
fi
其中$dir
包含所需的路径。作为单行:
if ls "$dir"/*.c >/dev/null 2>&1; then echo "have .c files"; else echo "no .c files"; fi
任意目录/任何扩展的通用版本
通过允许用户输入要搜索的目录并找到扩展名,您可以轻松地使脚本成为常规扩展搜索。下面的脚本是一个通用版本,通过 default 在当前目录中搜索.c
个文件,但会搜索作为第一个参数输入的任何目录以及作为第二个参数输入的任何扩展名: / p>
#!/bin/bash
dir=${1:-.}
ext=${2:-c}
if ls "$dir"/*."$ext" >/dev/null 2>&1; then
printf "have .%s files\n" "$ext"
else
printf "no .%s files\n" "$ext"
fi
<强>实施例强>
$ bash ~/scr/utl/search_ext.sh debug txt
have .txt files
$ ls -l1 debug/*.txt
debug/array.txt
debug/data.txt
$ bash ~/scr/utl/search_ext.sh debug foo
no .foo files
(没有.foo
个文件)
检测是否还存在非.c
扩展程序
这会稍微改变一下,但要确定某个目录是否包含带有.c
扩展名的文件以外的文件,您必须检查每个文件。在POSIX shell中,您可以使用expr string : regex
功能来检查模式。 (在bash中有几种不同的方法可以做到这一点)。以下内容将满足您的需求:
for i in "$dir"/*; do ## test that each is a 'file' and has .c ext
if [ -f "$i" -a $(expr "$i" : ".*.c") -eq 0 ]; then
echo "non '.c' files" ## print error & exit on non .c file
exit 1
fi
done
echo "have .c files" ## we are here -- they are all .c files
使用Bash参数扩展
#!/bin/bash
dir=${1:-.}
for i in "$dir"/*; do ## test that each is a 'file' and has .c ext
if [ -f "$i" -a ${i##*.} != "c" ]; then
echo "non '.c' files" ## print error & exit on non .c file
exit 1
fi
done
echo "have .c files" ## we are here -- they are all .c files
这比POSIX使用expr
要快。
提示搜索目录
您发布的代码没有多大意义。 (并且有许多缺少';'
和done
语句,并且您从未使用过path
)无需更改为用户输入的目录。如果您这样做,就像在代码中那样,您必须更改第二个循环。这是一个提示搜索目录的更新,如果搜索路径中存在子目录,则会退出:
#!/bin/bash
printf "enter path: "
read -r dir
dir=${dir%/} ## check/trim trailing '/'
if [ ! -d "$dir" ]; then ## validate dir exists
echo "error: No such directory '$dir'"
exit 1
fi
for i in "$dir"/*; do ## test that each is a 'file' and has .c ext
## if you want to exit if a subdir exists, just add -d test
if [ -d "$i" ]; then
echo "subdirectory present"
exit 1
fi
if [ -f "$i" -a ${i##*.} != "c" ]; then
echo "non '.c' files" ## print error & exit on non .c file
exit 1
fi
done
echo "have .c files" ## we are here -- they are all .c files
您可以根据自己的喜好定制。