我有以下脚本:
#!/bin/sh
cd $2
ls *.$1 | wc -l
我用:./myct java test
其中java和test是我传递的参数
总的来说,我最近开始学习shell脚本,我喜欢玩它,所以我想知道是否有可能让这个脚本更短?
由于
答案 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
但是,我建议您关注可靠性(检查有效输入)和可维护性(为清晰起见而写)而不是最大的简洁性。考虑如果没有提供参数会发生什么,例如;您可能希望显示帮助消息而不是错误消息。如果参数中包含空格,则此脚本也会失败。