Я сделал бы это как так:
#!/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"
Перед повторным запуском службы может потребоваться подождать несколько секунд, чтобы она правильно остановилась. Вы можете задержать ваш скрипт со следующей строкой
# waiting for 5 seconds
sleep 5
Вы можете увидеть более подробную информацию здесь - http://www.cyberciti.biz/faq/linux-unix-sleep-bash-scripting/
Я искал довольно долго, но я нашел одно решение здесь для этого SuperUser Q&A под названием: Как мне отделить процесс от терминала, полностью? , после того, как я написал свой вопрос здесь.
| at now