IBM System i (AS400): IFS上のテキスト形式ファイルを5250プロンプトから印刷(スプール化)
本記事はIBM i OSにおけるIFS上のテキスト形式ファイルをコマンドでPrint(スプールファイル化)する方法を記載する。
本記事はIBM i OSにおけるIFS上のテキスト形式ファイルをコマンドでPrint(スプールファイル化)する方法を記載する。
本記事は基本的なGitコマンドを基にサンプルシェルの更新の過程でローカルブランチの作成手法を紹介する。 対象サブコマンド: init, status, add, commit, log, show, branch, checkout, tag. ※尚、各項目のコマンド説明文にgit開発元のReferenceリンクを併記している。
以下の内容は本記事には含まず、既知・設定済みとして扱う。
IBM i(AS400)上のシェルスクリプト内でCLコマンドを実行することができるので、物によってはCLPでプログラムを組むより簡単にできることがある。当記事は「引数で与えられたファイル内の端末デバイス一覧を用いてデバイスを一括で作成するシェル」を通じてシェル内でのCLコマンドの使用方法を紹介する。
シェルコマンドpushd, popd, dirsを用いて、ディレクトリスタックを使うことでディレクトリ間の移動を簡潔に行うTips。
pushdでスタックにジャンプしたいディレクトリを登録し、それをカレントディレクトリとする。popdで一番最後に登録したディレクトリを取り出し、それをカレントディレクトリとする。dirsでスタック内に登録されているディレクトリを表示。
$ pushd /Applications/MAMP
/Applications/MAMP ~
$ pushd /var/log
/var/log /Applications/MAMP ~
$ pushd /etc
/etc /var/log /Applications/MAMP ~
$ dirs -v
0 /etc
1 /var/log
2 /Applications/MAMP
3 ~
$ popd
/var/log /Applications/MAMP ~
$ dirs -v
0 /var/log
1 /Applications/MAMP
2 ~
$ pwd
/var/log
上記のスタックの状態からホームディレクトリに移動するにはpushd +2を使用する。
$ pushd +2
~ /var/log /Applications/MAMP
$ pwd
/Users/yu
$ dirs -v
0 ~
1 /var/log
2 /Applications/MAMP
$ pushd +2
/Applications/MAMP ~ /var/log
$ pwd
/Applications/MAMP
$
当コマンドをより便利に使う為に、以下のaliasやよく使うディレクトリを予め~/.bash_profile等に登録しておくと良い。
alias pu='pushd'
alias po='popd'
alias dirs='dirs -v'
alias d='dirs'
alias pu1='pushd +1'
alias pu2='pushd +2'
alias pu3='pushd +3'
alias pu4='pushd +4'
alias pu5='pushd +5'
alias pu6='pushd +6'
alias pu7='pushd +7'
alias pu8='pushd +8'
alias pu9='pushd +9'
これで若干でも日々のタイプ量が減ると思うと、かなり良い。
以下のシェルスクリプトはfor文のワードリストに文字列変数を使用したもの。文字列はスペース区切でパラメータ変数に格納されloopする。また、ワードリストにバッククォートで括ったコマンドを指定すると、そのコマンドの実行結果がパラメータ変数に渡される。
#!/bin/sh
VARS="1 2 3 four five"
for VAR in $VARS
do
echo $VAR
done
echo ""
for LIST in `date`
do
echo $LIST
done
シェルスクリプトのfor文の一般式は下記の通り。
for パラメータ変数 in ワードリスト
do
コマンド
done
ワードリストの要素をパラメータ変数に代入しdo~done間をワードリストの要素分ループする。
先日書いたシェルスクリプトでプロセスを監視し自動実行&自動killのシェルスクリプトは、その後結局使わず、さらに簡易的なコードで済ませました。
scheckp.sh
#!/usr/bin/sh
while true
do
isAliveSev=`ps -ef | grep "/server" | grep -v grep | wc -l`
if [ $isAliveSev = 1 ]; then
echo "o:server process"
else
echo "x:server process"
/ret/sev/server &
fi
sleep 300 # モニター間隔(秒単位)
done
echeckp.sh
#!/usr/bin/sh
while true
do
isAliveEng=`ps -ef | grep "/engine" | grep -v grep | wc -l`
if [ $isAliveEng = 1 ]; then
echo "o:engine process"
else
echo "x:engine process"
/ret/eng/engine &
fi
sleep 300 # モニター間隔(秒単位)
done