新規記事の投稿を行うことで、非表示にすることが可能です。
2017年05月07日
キー番号の競合チェックが必要になったためシェルで。。 ・同一キー番号がリストにないかチェックし、なければリストに追加 ・同一キー番号がリストにないかチェックし、あればリストから削除
#================================================================
# ファイル名:kyougou_keyadd.sh
# 概要 :同一キー番号がリストにないかチェックし、なければリストに追加
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、なければリストに追加します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "$inputkey は既に登録されています。"
return 0
fi
#同一キー番号なし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
#正常終了
return 0
#================================================================
# ファイル名:kyougou_keydel.sh
# 概要 :同一キー番号がリストにないかチェックし、あればリストから削除
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、あればリストから削除します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "削除対象あり。"
#cat keychk_list | sed -e "s/$inputkey//"
sed -i -e "/$inputkey/d" keychk_list
return 0
fi
#同一キー番号なし
echo "正常終了しました。"
#正常終了
return 0
# ファイル名:kyougou_keyadd.sh
# 概要 :同一キー番号がリストにないかチェックし、なければリストに追加
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、なければリストに追加します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "$inputkey は既に登録されています。"
return 0
fi
#同一キー番号なし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
#正常終了
return 0
#================================================================
# ファイル名:kyougou_keydel.sh
# 概要 :同一キー番号がリストにないかチェックし、あればリストから削除
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、あればリストから削除します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "削除対象あり。"
#cat keychk_list | sed -e "s/$inputkey//"
sed -i -e "/$inputkey/d" keychk_list
return 0
fi
#同一キー番号なし
echo "正常終了しました。"
#正常終了
return 0
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
久々のC言語1と同じのをシェルで実装してみると・・・
#====================================================================================
# ファイル名:calender_chk.sh
# 概要 :calenderファイルに従い、元号(年号/和暦)コードから元号文字を取得する
#
# カレンダーファイル
# H,h,4,1989/1/8
# S,s,3,1926/12/25
# T,t,2,1912/7/30
# M,m,1,1868/9/8
#
# パラメータ:
# P1:年号コード
#====================================================================================
key_length=1
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "calenderファイルに従い、年号コードから年号文字を取得する"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
nengou_code=$1
#文字数チェック
if [ ${#nengou_code} -ne $key_length ]
then
echo "P1が1文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $nengou_code + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#---------------------------------------
#
#---------------------------------------
#リストが存在するかチェック
if [ ! -e calender.txt ]; then
#リストなし
echo "カレンダーファイルがありません。"
return 1
fi
#リストあり
#リスト内に同一元号コードが存在するかチェック
for line in `cat calender.txt`
do
colmun1=`echo ${line} | cut -d ',' -f 1`
colmun2=`echo ${line} | cut -d ',' -f 2`
colmun3=`echo ${line} | cut -d ',' -f 3`
colmun4=`echo ${line} | cut -d ',' -f 4`
echo "項目1:${colmun1}"
echo "項目2:${colmun2}"
echo "項目3:${colmun3}"
echo "項目4:${colmun4}"
echo "行終了"
if [ $colmun3 = $nengou_code ]
then
echo "ヒットです。"
echo "項目2:${colmun2}"
return 0
fi
done
#異常終了
echo "ノーヒットです。"
return 1
# ファイル名:calender_chk.sh
# 概要 :calenderファイルに従い、元号(年号/和暦)コードから元号文字を取得する
#
# カレンダーファイル
# H,h,4,1989/1/8
# S,s,3,1926/12/25
# T,t,2,1912/7/30
# M,m,1,1868/9/8
#
# パラメータ:
# P1:年号コード
#====================================================================================
key_length=1
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "calenderファイルに従い、年号コードから年号文字を取得する"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
nengou_code=$1
#文字数チェック
if [ ${#nengou_code} -ne $key_length ]
then
echo "P1が1文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $nengou_code + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#---------------------------------------
#
#---------------------------------------
#リストが存在するかチェック
if [ ! -e calender.txt ]; then
#リストなし
echo "カレンダーファイルがありません。"
return 1
fi
#リストあり
#リスト内に同一元号コードが存在するかチェック
for line in `cat calender.txt`
do
colmun1=`echo ${line} | cut -d ',' -f 1`
colmun2=`echo ${line} | cut -d ',' -f 2`
colmun3=`echo ${line} | cut -d ',' -f 3`
colmun4=`echo ${line} | cut -d ',' -f 4`
echo "項目1:${colmun1}"
echo "項目2:${colmun2}"
echo "項目3:${colmun3}"
echo "項目4:${colmun4}"
echo "行終了"
if [ $colmun3 = $nengou_code ]
then
echo "ヒットです。"
echo "項目2:${colmun2}"
return 0
fi
done
#異常終了
echo "ノーヒットです。"
return 1
久々のC言語1
/*
カレンダー情報を参照し、元号コードから元号文字を返す
calender.txt
H h 4 1989,1,8
S s 3 1926,12.25
T t 2 1912,7,30
M m 1 1868,9,8
*/
int gengou_str_get(int gengou_code, char *gengou_str)
{
typedef struct {
char gengou_oomoji[4];
char gengou_komoji[4];
int gengou_code;
char start_day[12];
}cale_t;
FILE *fp;
char *filename = "C:\\Study\\pleiades-e4.5-cpp-jre_20151002\\pleiades\\workspace\\C_Study_01\\src\\calender.txt";
cale_t cale_info;
cale_t *cale_info_p;
cale_info_p = &cale_info;
int ret;
/* ファイルのオープン */
if ((fp = fopen(filename, "r")) == NULL) {
fprintf(stderr, "%sのオープンに失敗しました.\n", filename);
return -1;
}
memset(cale_info_p, 0x00, sizeof(cale_t));
ret = -1;
/* ファイルの終端まで文字を読み取り表示する */
while( ( ret = fscanf( fp, "%s %s %d %s", cale_info_p->gengou_oomoji, cale_info_p->gengou_komoji, &(cale_info_p->gengou_code), cale_info_p->start_day ) ) != EOF ){
if (cale_info_p->gengou_code == gengou_code){
strncpy(gengou_str, cale_info_p->gengou_oomoji, sizeof(cale_info_p->gengou_oomoji));
printf("HIT!!\n");
/* ファイルのクローズ */
ret = 1;
break;
}
memset(cale_info_p, 0x00, sizeof(cale_t));
}
/* ファイルのクローズ */
fclose(fp);
return ret;
}
void TEST(void)
{
int now_gengou_code=3;
char gengou_str[4];
int ret;
memset(gengou_str, 0x00, sizeof(gengou_str));
#if 1
ret = gengou_str_get(now_gengou_code, gengou_str);
if(ret < 0){
printf("error gengou_str_get\n");
return;
}
printf("get %s\n", gengou_str);
#else
switch (now_gengou_code)
{
case 1:
printf("get M\n");
break;
case 2:
printf("get T\n");
break;
case 3:
printf("get S\n");
break;
case 4:
printf("get H\n");
break;
default:
printf("New\n");
break;
}
#endif
return;
}
2017年02月12日
シェルスクリプトです。 コマンドファイルを読み込んで順次コマンド実行するのですが コマンドファイル内に期待する実行結果などを記載し 自動で実行確認もしてくれるのを考えてました。(まだ色々問題はありそうですが)
#!/sbin/sh
#================================================================
# ファイル名:cmd_seqexec.sh
# 概要 :コマンドファイルの順次実行
# パラメータ:
# P1:コマンドファイル名
# P2:開始行数
# コマンドファイル形式:
# コマンド名,チェック(無/自動/対話),条件(一致/不一致),期待結果
#================================================================
#1ならdebugプリント出力
debug=0
#1なら全てのコマンド実行結果(標準出力)を出力する
#1以外なら対話確認の時だけ出力する
cmd_result_print=0
#初期化
gyou=0
cmd=""
cmd_start=0
#---------------------------------------
#デバックプリント関数
#---------------------------------------
debug_echo()
{
if [ $debug -eq 1 ]
then
echo "(debug)$debug_msg"
fi
}
#---------------------------------------
#エラープリント関数
#---------------------------------------
err_echo()
{
echo "コマンドファイルの順次実行が異常終了しました。"
echo "$err_msg"
if [ $cmd_start -eq 1 ]
then
echo "行数:$gyou コマンド名:$cmd"
fi
exit 0
}
#---------------------------------------
#コマンド実行関数
#---------------------------------------
func_cmd_exec()
{
#Noと現時刻を表示
echo "=================================================================="
echo ">>>行数:$gyou"
echo ">>>実行コマンド:$cmd"
#コマンド実行を行い、標準出力された内容を実行結果に設定する
cmd_result=$($cmd)
###cmd_result=$($cmd 2>&1) #標準出力、標準エラーの両方を変数に設定
if [ $cmd_result_print -eq 1 ]
then
echo ">>>実行結果:$cmd_result"
elif [ $chk = "対話" ]
then
echo ">>>実行結果:$cmd_result"
fi
}
#---------------------------------------
#対話確認関数
#---------------------------------------
func_taiwa()
{
while true
do
echo ">>>対話確認を行います。実行結果のok/ngを選択して下さい。:"
read answer
case $answer in
ok)
break
;;
ng)
err_msg="対話にてNGが選択されました。"; err_echo
;;
*)
;;
esac
done
}
#---------------------------------------
#メイン処理ここから
#---------------------------------------
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
err_msg="第一パラメータでコマンドファイルが指定されていません。"; err_echo
fi
#ファイルが存在するかチェック
if [ ! -e $1 ]
then
err_msg="第一パラメータで指定されたファイルがありません。"; err_echo
fi
file=$1
if [ $# -eq 1 ]
then
err_msg="第2パラメータで開始行数が指定されていません。"; err_echo
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $2 + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
err_msg="第2パラメータが数字ではありません。"; err_echo
fi
start_gyou=$2
#---------------------------------------
#コマンドファイルの順次実行
#---------------------------------------
gyou=1
cmd_start=1
while : #無限ループ
do
debug_msg="$gyou行目を処理します。"; debug_echo
if [ $gyou -lt $start_gyou ]
then
debug_msg="開始行数ではないのでパス"; debug_echo
gyou=$((gyou + 1))
continue
fi
#1行取得
line=$(sed -n ${gyou}P $file)
debug_msg="line=$line"; debug_echo
cmd=`echo "$line" | cut -d ',' -f 1`
chk=`echo "$line" | cut -d ',' -f 2`
jyouken=`echo "$line" | cut -d ',' -f 3`
expected_val=`echo "$line" | cut -d ',' -f 4`
debug_msg="1カラム目(コマンド):$cmd"; debug_echo
debug_msg="2カラム目(チャック):$chk"; debug_echo
debug_msg="3カラム目(条件 ):$jyouken"; debug_echo
debug_msg="4カラム目(期待結果):$expected_val"; debug_echo
if [ -z "$cmd" ]
then
debug_msg="コマンド未入力のためパス"; debug_echo
gyou=$((gyou + 1))
continue
fi
if [ $(echo "$cmd" | cut -c1) = "#" ]
then
debug_msg="コマンドの先頭文字が#のためスキップします。"; debug_echo
gyou=$((gyou + 1))
continue
fi
if [ "$cmd" = "end" ]
then
debug_msg="コマンドがendなので終了します。"; debug_echo
break
fi
case $chk in
"自動")
case $jyouken in
"一致")
if [ -z "$expected_val" ]
then
err_msg="コマンドファイルの期待結果が未入力です。"; err_echo
fi
#コマンド実行
func_cmd_exec
#期待結果と比較
if [ $cmd_result = $expected_val ]
then
echo ">>>自動チェック(一致):OK"
else
err_msg="自動チェックにてNGとなりました。"; err_echo
fi
;;
"含む")
if [ -z "$expected_val" ]
then
err_msg="コマンドファイルの期待結果が未入力です。"; err_echo
fi
#コマンド実行
func_cmd_exec
#期待結果と比較
if [ "$(echo "$cmd_result" | grep "$expected_val")" ]
then
echo ">>>自動チェック(含む):OK"
else
err_msg="自動チェックにてNGとなりました。"; err_echo
fi
;;
*)
err_msg="コマンドファイルの条件で一致/含む以外が指定されました。"; err_echo
;;
esac
;;
"対話")
#コマンド実行
func_cmd_exec
#対話確認関数
func_taiwa
;;
"無")
#コマンド実行
func_cmd_exec
;;
*)
err_msg="コマンドファイルのチェックで自動/対話/無以外が指定されました。"; err_echo
;;
esac
gyou=$((gyou + 1))
sleep 1
done
echo "コマンドファイルの順次実行が正常終了しました。"
#正常終了
exit 1
#================================================================
# ファイル名:cmd_seqexec.sh
# 概要 :コマンドファイルの順次実行
# パラメータ:
# P1:コマンドファイル名
# P2:開始行数
# コマンドファイル形式:
# コマンド名,チェック(無/自動/対話),条件(一致/不一致),期待結果
#================================================================
#1ならdebugプリント出力
debug=0
#1なら全てのコマンド実行結果(標準出力)を出力する
#1以外なら対話確認の時だけ出力する
cmd_result_print=0
#初期化
gyou=0
cmd=""
cmd_start=0
#---------------------------------------
#デバックプリント関数
#---------------------------------------
debug_echo()
{
if [ $debug -eq 1 ]
then
echo "(debug)$debug_msg"
fi
}
#---------------------------------------
#エラープリント関数
#---------------------------------------
err_echo()
{
echo "コマンドファイルの順次実行が異常終了しました。"
echo "$err_msg"
if [ $cmd_start -eq 1 ]
then
echo "行数:$gyou コマンド名:$cmd"
fi
exit 0
}
#---------------------------------------
#コマンド実行関数
#---------------------------------------
func_cmd_exec()
{
#Noと現時刻を表示
echo "=================================================================="
echo ">>>行数:$gyou"
echo ">>>実行コマンド:$cmd"
#コマンド実行を行い、標準出力された内容を実行結果に設定する
cmd_result=$($cmd)
###cmd_result=$($cmd 2>&1) #標準出力、標準エラーの両方を変数に設定
if [ $cmd_result_print -eq 1 ]
then
echo ">>>実行結果:$cmd_result"
elif [ $chk = "対話" ]
then
echo ">>>実行結果:$cmd_result"
fi
}
#---------------------------------------
#対話確認関数
#---------------------------------------
func_taiwa()
{
while true
do
echo ">>>対話確認を行います。実行結果のok/ngを選択して下さい。:"
read answer
case $answer in
ok)
break
;;
ng)
err_msg="対話にてNGが選択されました。"; err_echo
;;
*)
;;
esac
done
}
#---------------------------------------
#メイン処理ここから
#---------------------------------------
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
err_msg="第一パラメータでコマンドファイルが指定されていません。"; err_echo
fi
#ファイルが存在するかチェック
if [ ! -e $1 ]
then
err_msg="第一パラメータで指定されたファイルがありません。"; err_echo
fi
file=$1
if [ $# -eq 1 ]
then
err_msg="第2パラメータで開始行数が指定されていません。"; err_echo
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $2 + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
err_msg="第2パラメータが数字ではありません。"; err_echo
fi
start_gyou=$2
#---------------------------------------
#コマンドファイルの順次実行
#---------------------------------------
gyou=1
cmd_start=1
while : #無限ループ
do
debug_msg="$gyou行目を処理します。"; debug_echo
if [ $gyou -lt $start_gyou ]
then
debug_msg="開始行数ではないのでパス"; debug_echo
gyou=$((gyou + 1))
continue
fi
#1行取得
line=$(sed -n ${gyou}P $file)
debug_msg="line=$line"; debug_echo
cmd=`echo "$line" | cut -d ',' -f 1`
chk=`echo "$line" | cut -d ',' -f 2`
jyouken=`echo "$line" | cut -d ',' -f 3`
expected_val=`echo "$line" | cut -d ',' -f 4`
debug_msg="1カラム目(コマンド):$cmd"; debug_echo
debug_msg="2カラム目(チャック):$chk"; debug_echo
debug_msg="3カラム目(条件 ):$jyouken"; debug_echo
debug_msg="4カラム目(期待結果):$expected_val"; debug_echo
if [ -z "$cmd" ]
then
debug_msg="コマンド未入力のためパス"; debug_echo
gyou=$((gyou + 1))
continue
fi
if [ $(echo "$cmd" | cut -c1) = "#" ]
then
debug_msg="コマンドの先頭文字が#のためスキップします。"; debug_echo
gyou=$((gyou + 1))
continue
fi
if [ "$cmd" = "end" ]
then
debug_msg="コマンドがendなので終了します。"; debug_echo
break
fi
case $chk in
"自動")
case $jyouken in
"一致")
if [ -z "$expected_val" ]
then
err_msg="コマンドファイルの期待結果が未入力です。"; err_echo
fi
#コマンド実行
func_cmd_exec
#期待結果と比較
if [ $cmd_result = $expected_val ]
then
echo ">>>自動チェック(一致):OK"
else
err_msg="自動チェックにてNGとなりました。"; err_echo
fi
;;
"含む")
if [ -z "$expected_val" ]
then
err_msg="コマンドファイルの期待結果が未入力です。"; err_echo
fi
#コマンド実行
func_cmd_exec
#期待結果と比較
if [ "$(echo "$cmd_result" | grep "$expected_val")" ]
then
echo ">>>自動チェック(含む):OK"
else
err_msg="自動チェックにてNGとなりました。"; err_echo
fi
;;
*)
err_msg="コマンドファイルの条件で一致/含む以外が指定されました。"; err_echo
;;
esac
;;
"対話")
#コマンド実行
func_cmd_exec
#対話確認関数
func_taiwa
;;
"無")
#コマンド実行
func_cmd_exec
;;
*)
err_msg="コマンドファイルのチェックで自動/対話/無以外が指定されました。"; err_echo
;;
esac
gyou=$((gyou + 1))
sleep 1
done
echo "コマンドファイルの順次実行が正常終了しました。"
#正常終了
exit 1
2017年01月28日
Teratermのマクロ作成。第2弾。 sqlplusでテーブル参照をし続けるマクロ。ちゃんと動きますよ。
;======================================================
;teratermマクロ
;sqlplusで接続して特定テーブル参照をし続けるマクロ
;
;参照するテーブルの検索キーは変数指定です。
;コマンドファイル実行前に、デフォルトで最初に実行したい
;コマンドも記載可能
;ログを自動で取得します。
;======================================================
;-----------------------------------------------------------
;初期設定
;-----------------------------------------------------------
;ログ自動保存
;ログ保存先
LOGSPATH = 'C:\test\log\'
;ログファイル名
getdate LOG_NAME 'teraterm(&h)_%Y%m%d_%H%M%S.log'
FULLPATH = LOGSPATH
strconcat FULLPATH LOG_NAME
;ログ取得開始
logopen FULLPATH 1 1
;タイトル設定
settitle 'sqlplusでテーブル参照をし続けるマクロ'
;プロンプト
wait_prompt = 'SQL>'
;ポーズタイム(s)
pause_time = 3
;参照するテーブルの検索キー
code_str = '> 300'
name_str = "like '%ナ%'" ;文字列に「'」を使用したいので「"」を使用した。
;-----------------------------------------------------------
;デフォルトで最初に実行したいコマンド
;-----------------------------------------------------------
default_input = 1 ;無ければ0にする
if default_input = 1 then
sendln 'date'
sendln 'whoami'
sendln 'hostname'
sendln 'pwd'
endif
;-----------------------------------------------------------
;sqlplusで接続し、初期設定
;-----------------------------------------------------------
sendln 'sqlplus xxx/xxx'
pause 1
sendln 'set linesize 3000'
pause 1
sendln 'set pages 100'
pause 1
;-----------------------------------------------------------
;テーブル参照し続ける
;-----------------------------------------------------------
;実行回数
count = 1
while 1
;10回毎に実行回数を表示する
if count % 10 = 0 then
;実行回数を表示する
int2str count_str count ;数値を文字に変換
sendln '###' count_str ' 回目を実行します ###'
;タイムスタンプ
sendln '!date'
pause 1
endif
;テーブル参照1
sendln 'select * from fruit where code ' code_str ' order by code;'
;プロンプト出力を待つ
wait wait_prompt
;指定時間ポーズする
pause pause_time
;テーブル参照2
sendln 'select * from fruit where name ' name_str ' order by code;'
;プロンプト出力を待つ
wait wait_prompt
;指定時間ポーズする
pause pause_time
count = count + 1
endwhile
:breakloop
;---END---
;teratermマクロ
;sqlplusで接続して特定テーブル参照をし続けるマクロ
;
;参照するテーブルの検索キーは変数指定です。
;コマンドファイル実行前に、デフォルトで最初に実行したい
;コマンドも記載可能
;ログを自動で取得します。
;======================================================
;-----------------------------------------------------------
;初期設定
;-----------------------------------------------------------
;ログ自動保存
;ログ保存先
LOGSPATH = 'C:\test\log\'
;ログファイル名
getdate LOG_NAME 'teraterm(&h)_%Y%m%d_%H%M%S.log'
FULLPATH = LOGSPATH
strconcat FULLPATH LOG_NAME
;ログ取得開始
logopen FULLPATH 1 1
;タイトル設定
settitle 'sqlplusでテーブル参照をし続けるマクロ'
;プロンプト
wait_prompt = 'SQL>'
;ポーズタイム(s)
pause_time = 3
;参照するテーブルの検索キー
code_str = '> 300'
name_str = "like '%ナ%'" ;文字列に「'」を使用したいので「"」を使用した。
;-----------------------------------------------------------
;デフォルトで最初に実行したいコマンド
;-----------------------------------------------------------
default_input = 1 ;無ければ0にする
if default_input = 1 then
sendln 'date'
sendln 'whoami'
sendln 'hostname'
sendln 'pwd'
endif
;-----------------------------------------------------------
;sqlplusで接続し、初期設定
;-----------------------------------------------------------
sendln 'sqlplus xxx/xxx'
pause 1
sendln 'set linesize 3000'
pause 1
sendln 'set pages 100'
pause 1
;-----------------------------------------------------------
;テーブル参照し続ける
;-----------------------------------------------------------
;実行回数
count = 1
while 1
;10回毎に実行回数を表示する
if count % 10 = 0 then
;実行回数を表示する
int2str count_str count ;数値を文字に変換
sendln '###' count_str ' 回目を実行します ###'
;タイムスタンプ
sendln '!date'
pause 1
endif
;テーブル参照1
sendln 'select * from fruit where code ' code_str ' order by code;'
;プロンプト出力を待つ
wait wait_prompt
;指定時間ポーズする
pause pause_time
;テーブル参照2
sendln 'select * from fruit where name ' name_str ' order by code;'
;プロンプト出力を待つ
wait wait_prompt
;指定時間ポーズする
pause pause_time
count = count + 1
endwhile
:breakloop
;---END---
久々にTeratermのマクロを作成。 コマンドファイルを読み込んで順次実行するやつです。ちゃんと動きますよ。
以下、作ってみたプログラム
;======================================================
;teratermマクロ
;コマンドファイルを読み込み順次実行するマクロです。
;
;コマンドファイル順次実行時、プロンプト出力を待ってから
;次のコマンドを実行するか、 指定時間ポーズするかを選択できます。
;コマンドファイル実行前に、デフォルトで最初に実行したい
;コマンドも記載可能
;ログを自動で取得します。
;======================================================
;-----------------------------------------------------------
;初期設定
;-----------------------------------------------------------
;ログ自動保存
;ログ保存先
LOGSPATH = 'C:\test\log\'
;ログファイル名
getdate LOG_NAME 'teraterm(&h)_%Y%m%d_%H%M%S.log'
FULLPATH = LOGSPATH
strconcat FULLPATH LOG_NAME
;ログ取得開始
logopen FULLPATH 1 1
;タイトル設定
settitle 'コマンドファイルの順次実行マクロ'
;コマンドファイル
cmdfile = 'C:\test\loadcmd.txt'
;コマンドファイル順次実行時、プロンプト出力を待つか(1)
;指定時間ポーズするか(1以外)、どちらかを設定
wait_prompt_f = 0
;プロンプト
wait_prompt = '123'
;ポーズタイム(s)
pause_time = 1
;-----------------------------------------------------------
;デフォルトで最初に実行したいコマンド
;-----------------------------------------------------------
default_input = 1 ;無ければ0にする
if default_input = 1 then
sendln 'date'
sendln 'whoami'
sendln 'hostname'
sendln 'pwd'
endif
;-----------------------------------------------------------
;コマンドファイルの順次実行
;-----------------------------------------------------------
;ファイルオープン
fileopen fh cmdfile 0
;ファイル内の実行行数
count = 1
while 1
;コマンドファイルから1行読み込み
filereadln fh buf
;読み込めない時はループを抜ける
if result goto breakloop
;ファイル内の実行行数表示
int2str count_str count ;数値を文字に変換
sendln '### ' count_str ' 行目を実行します ###'
;コマンド実行
sendln buf
if wait_prompt_f = 1 then
;プロンプト出力を待つ
wait wait_prompt
else
;指定時間ポーズする
pause pause_time
endif
count = count + 1
endwhile
:breakloop
;ファイルクローズ
fileclose fh
sendln '#マクロ正常終了
;---END---
2017年01月01日
初投稿。初心を忘れずに・・・頑張りたいと思います。
システムエンジニアとして、日々仕事をしながら色々な事を学んでおりますが
せっかく覚えた技術も別のプロジェクトに移ったり、使用する機会が減ると
あっという間に忘れてしまうものです。
せっかく覚えた事ですので、思い出しやすいように技術ノートを作ってみました。
また、何事も経験と思いながらもブログ、WEBページ作成などをした事がなかったため
今回初めての投稿となります。これから徐々に技術ノートを作成していきたいと思います。
(=´ー`)ノ ヨロシク
せっかく覚えた技術も別のプロジェクトに移ったり、使用する機会が減ると
あっという間に忘れてしまうものです。
せっかく覚えた事ですので、思い出しやすいように技術ノートを作ってみました。
また、何事も経験と思いながらもブログ、WEBページ作成などをした事がなかったため
今回初めての投稿となります。これから徐々に技術ノートを作成していきたいと思います。
(=´ー`)ノ ヨロシク