シェルスクリプトを作成したいですdf
。なぜなら、df name_of_file
ファイルの内容を入力してインポートしたいからです。
ファイル名がディレクトリにある場合は、その内容を表示したいと思います。そうでない場合は、サイズを単語、行、バイト単位で表示したいと思います。私は何をすべきですか?これまで私はこれを持っています:
#!/bin/bash
FILENAME=$FILENAME
FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(stat -w%s "$FILENAME")
FILELINES=$(stat -l%s "$FILENAME")
echo "Size of $FILENAME in bytes = $FILEBYTES bytes, $FILEWORDS words, $FILELINES lines."
答え1
私はそうします:
#!/bin/bash
FILENAME=$1
[ -f "$FILENAME" ] || exit
FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(wc -w "$FILENAME" | awk '{print $1}')
FILELINES=$(wc -l "$FILENAME" | awk '{print $1}')
printf "Size of %s -- %s bytes, %s words, %s lines.\n" \
"$FILENAME" "$FILEBYTES" "$FILEWORDS" "$FILELINES"
はい
次のファイルがあるとしましょう。
$ ls -l | grep bbbb
-rw-rw-r-- 1 saml saml 3283 May 18 02:49 bbbb
という名前のスクリプトを実行しますdf.bash
。このdf
コマンドはUnixで使用されました。
$ ./df.bash bbbb
Size of bbbb -- 3283 bytes, 386 words, 94 lines.
存在しないファイルを探す:
$ ./df.bash bbbbbbb
$
代替方法
awk
カウントの代わりにマージとカウントを実行すると、無駄な通話を減らすことができますwc
。
#!/bin/bash
FILENAME=$1
[ -f "$FILENAME" ] || exit
FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(awk '{ total = total + NF }; END {print total}' "$FILENAME")
FILELINES=$(awk 'END {print NR}' "$FILENAME")
printf "Size of %s -- %s bytes, %s words, %s lines.\n" \
"$FILENAME" "$FILEBYTES" "$FILEWORDS" "$FILELINES"
答え2
あなたはこれをしたいですか?
#! /bin/bash
if [[ -f $(basename "$1") ]]
then
cat "$1"
else
wc -w -l -c "$1"
fi
ところで、df
すでにディスク容量を表示するコマンドがあります。スクリプトを別の名前で呼び出すことをお勧めします。