我正在尝试编写一个脚本来模仿linux bash中的脚本输出:
(bob@server:~> filesize
Enter a file name (or q! to stop): fee
fee uses 123 bytes.
Enter a file name (or q! to sp): fi
There is no file called fi.
Enter a file name (or q! to stop): foe
foe uses 9802 bytes.
Enter a file name (or q! to stop): q!
bob@server:~>)
我的脚本看起来像这样(脚本名称是filesize):
#!/bin/bash
while true; do
read -p "Enter a filename (Or q! to stop) : " X
case $X in
[q!]* ) exit;;
* ) echo "$X uses "$(wc -c <$X)" bytes";./filesize;;
esac
done
在我输入q!
以外的任何内容并且$X
显示使用$(wc -c <$X)
之后,我必须输入q!
两次以使命令退出。
如何制作它以便我只需键入q!
一次以使命令退出,而不是多次输入我读取文件大小的内容?
答案 0 :(得分:2)
filesize(){ stat -c %s -- "$@";}
如果你坚持要求所有的喋喋不休:
filesize(){ stat -c %s -- "$@";}
while :; do
read -p "Enter a filename (Or q! to stop) : " x
case "$x" in
'q!') exit;;
*) printf '%s\n' "$x uses $(filesize "$x") bytes";;
esac
done
然而,单独的函数比while循环更多的是Unix语言。
wc -c < "$x"
也可以。区别在于stat
会立即告诉您大小,而无需进行计数。