繁体   English   中英

Linux Shell脚本,缩短了脚本

[英]Linux shell scripting, shortening the script

我有以下脚本:

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

我用以下./myct java test运行它: ./myct java test

其中java和test是我通过的参数

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

谢谢

当文件名包含换行符(请参阅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

这很短,我知道该怎么做:

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

但是,我建议您将重点放在可靠性(检查有效输入)和可维护性(为清晰起见)上,而不要专注于简洁性。 例如,考虑没有提供参数的情况; 您可能希望显示帮助消息而不是错误消息。 如果参数中包含空格,则此脚本也会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM