Linux shell脚本,缩短脚本

时间:2017-12-26 13:27:35

标签: linux shell

我有以下脚本:

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

我用:./myct java test

运行它

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

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

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-2)

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

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

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