「Hagi utils」の版間の差分
提供: Wikinote
細 |
(→plog コマンド) |
||
| 行33: | 行33: | ||
プログラムを定期的に実行し、その出力にタイムスタンプを付与するシェルスクリプト。 | プログラムを定期的に実行し、その出力にタイムスタンプを付与するシェルスクリプト。 | ||
| − | + | #!/bin/bash | |
| + | ### parameters ### | ||
| + | INTERVAL=1 | ||
| + | PRINT_TIME=1 | ||
| + | PRINT_DATE=0 | ||
| + | ### constants ### | ||
| + | CMD_NAME=$(basename $0) | ||
| + | DEFAULT_SCRIPT='{ print strftime("%T"), $0 }' | ||
| + | ADDDATE_SCRIPT='{ print strftime("%F %T"), $0 }' | ||
| + | ### flags & variables ### | ||
| + | GETOPT_ERR=0 | ||
| + | |||
| + | ### functions ### | ||
| + | function usage() { | ||
| + | echo "Usage:" | ||
| + | echo " $CMD_NAME [-d] [-i INTERVAL] [-n] command" | ||
| + | echo " $CMD_NAME -h" | ||
| + | echo "Options:" | ||
| + | echo " -d Print date besides time." | ||
| + | echo " -h Print this help." | ||
| + | echo " -i INTERVAL Specify the interval between executions. (seconds) Default is 1 s." | ||
| + | echo " -n Do not print time or date. Print command output only." | ||
| + | } | ||
| + | |||
| + | ### main ### | ||
| + | while getopts "i:ndh" opt; do | ||
| + | case $opt in | ||
| + | i) INTERVAL=$OPTARG;; | ||
| + | n) PRINT_TIME=0;; | ||
| + | d) PRINT_DATE=1;; | ||
| + | h) usage; exit 0;; | ||
| + | ?) GETOPT_ERR=1;; | ||
| + | esac | ||
| + | done | ||
| + | shift $(( $OPTIND - 1 )) | ||
| + | |||
| + | if [ $GETOPT_ERR -eq 1 -o $# -eq 0 ]; then | ||
| + | usage | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | CMD=$@ | ||
| + | while : ; do | ||
| + | if [ $PRINT_TIME -eq 0 ]; then | ||
| + | $CMD | ||
| + | elif [ $PRINT_DATE -eq 1 ]; then | ||
| + | $CMD | gawk "$ADDDATE_SCRIPT" | ||
| + | else | ||
| + | $CMD | gawk "$DEFAULT_SCRIPT" | ||
| + | fi | ||
| + | sleep $INTERVAL | ||
| + | done | ||
2009年5月13日 (水) 22:45時点における版
【秘密】(笑)
ちょっとしたコマンドやライブラリを自宅と会社で同期するためのページ。 学生時代に作ってたヤツは今じゃ全然使い物にならない…。
C 言語
printb() 関数
整数を 2 進数で表示する関数。
#include <stdio.h>
void printb(unsigned num) {
int i;
for (i = 31; i >= 0; i--) {
putchar(((num >> i) & 1) + '0');
}
}
void printb64(unsigned long long num) {
int i;
for (i = 63; i >= 0; i--) {
putchar(((num >> i) & 1) + '0');
}
}
使用例:argv[1] を atoi() に渡して printb() にかけるコマンド
[hagio@lab ~]$ printb 1234567890 01001001100101100000001011010010 [hagio@lab ~]$ printb -1 11111111111111111111111111111111
bash スクリプト
plog コマンド
プログラムを定期的に実行し、その出力にタイムスタンプを付与するシェルスクリプト。
#!/bin/bash
### parameters ###
INTERVAL=1
PRINT_TIME=1
PRINT_DATE=0
### constants ###
CMD_NAME=$(basename $0)
DEFAULT_SCRIPT='{ print strftime("%T"), $0 }'
ADDDATE_SCRIPT='{ print strftime("%F %T"), $0 }'
### flags & variables ###
GETOPT_ERR=0
### functions ###
function usage() {
echo "Usage:"
echo " $CMD_NAME [-d] [-i INTERVAL] [-n] command"
echo " $CMD_NAME -h"
echo "Options:"
echo " -d Print date besides time."
echo " -h Print this help."
echo " -i INTERVAL Specify the interval between executions. (seconds) Default is 1 s."
echo " -n Do not print time or date. Print command output only."
}
### main ###
while getopts "i:ndh" opt; do
case $opt in
i) INTERVAL=$OPTARG;;
n) PRINT_TIME=0;;
d) PRINT_DATE=1;;
h) usage; exit 0;;
?) GETOPT_ERR=1;;
esac
done
shift $(( $OPTIND - 1 ))
if [ $GETOPT_ERR -eq 1 -o $# -eq 0 ]; then
usage
exit 0
fi
CMD=$@
while : ; do
if [ $PRINT_TIME -eq 0 ]; then
$CMD
elif [ $PRINT_DATE -eq 1 ]; then
$CMD | gawk "$ADDDATE_SCRIPT"
else
$CMD | gawk "$DEFAULT_SCRIPT"
fi
sleep $INTERVAL
done