Linux shell脚本,缩短脚本

问题描述 投票:1回答:2

我有以下脚本:

#!/bin/sh
cd $2
ls *.$1 | wc -l

我用它来运行:./myct java test

其中java和test是我传递的参数

总的来说,我最近开始学习shell脚本,我喜欢玩它,所以我想知道是否可以使这个脚本更短?

谢谢

linux shell
2个回答
-2
投票

这是我所知道的如何做到这一点:

#!/bin/sh
ls $2/*.$1|wc -l

但是,我建议您关注可靠性(检查有效输入)和可维护性(为清晰起见而写)而不是最大的简洁性。考虑如果没有提供参数会发生什么,例如;您可能希望显示帮助消息而不是错误消息。如果参数中包含空格,则此脚本也会失败。


1
投票

当文件名包含换行符(请参阅http://mywiki.wooledge.org/ParsingLs)和/或您的args包含通配符(google引用shell变量)或您的目录为空(google nullglob)或不存在或者...时,您当前的方法将失败使用bash获取当前目录中具有给定扩展名的文件数量:

shopt -s nullglob
arr=( "$2"/*."$1" )
echo "${#arr[@]}"

例如:

$ ls tmp
 1.java   2.java  'a'$'\n''b.java'

$ cat tst.sh
echo "Wrong:"
ls $2/*.$1|wc -l

echo "Right:"
shopt -s nullglob
arr=( "$2"/*."$1" )
echo "${#arr[@]}"

$ ./tst.sh java tmp
Wrong:
4
Right:
3
© www.soinside.com 2019 - 2024. All rights reserved.