2014年8月24日日曜日

pdstedit

FILE KIND:
解析対象のログファイル種別を示します。
アンロード統計ログファイルの場合は"STJ",システムログファイル(アンロードログファイル又はシステムログのファイルグループ)の場合は"FJ"を出力します。


FILE KIND:
解析対象のログファイル種別を示します。
STJ:
32ビットモードのHiRDBで取得したアンロード統計ログファイル
STJ64:
64ビットモードのHiRDBで取得したアンロード統計ログファイル
FJ:
アンロードログファイル(通常のファイル)
FJIOS:
アンロードログファイル(HiRDBファイル)




14.3.5 グローバルバッファプールに関する統計情報

 2 STJ      :c:\tmp\stjdata\pdstj02
  sys
  uap
  sql
  sop
  dop
  pcd
  obj
  sqh
  buf
  fil
  dfw
  idx
  fsv
  hba


インデクスに関する統計情報

NO FILE KIND:LOG FILE NAME
  LOG KIND             FIRST                 LAST                         NUM
 1 STJ      :c:\tmp\pdstj1
  sys
  uap
  sql
  sop
  dop
  pcd
  buf
  fil
  dfw
  idx


14.4.2 DAT形式ファイルの単位

DAT形式ファイルへ統計情報を出力する場合,統計情報ごとにファイルを作成します。ファイルはユーザが指定したディレクトリ下に作成します。DAT形式ファイルのファイル名称一覧を次の表に示します。

2014年8月3日日曜日

【Windows】
左端から見ない(/Bの不付加)により、両端に"の付いている場合でも、一度ファイルへ格納することなく一発で判定可能となる。
echo "%TARGET_PATH%" | findstr /I /C:"%DIR_PATH%"

2014年2月24日月曜日

【Linux】
■tar
命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。

■一定回数のループ
i=0
while [ $i -lt 5 ]; do
echo $i
i=`expr $i + 1`
done

■リスト処理
vars="x y z"
for var in $vars; do
echo $var
done

■行単位の処理
○コマンド実行結果から:
ls -l | while read line; do
echo $line
done
○ファイルから:
while read line; do
echo $line
done < file.txt

■コマンド実行結果のリスト処理
for file in `ls`; do
echo $file
done

■switch 文
case $var in
hoge)
echo "var is hoge"
;;
foo|bar)
echo "var is foo or bar"
;;
*)
echo "var is unknown"
;;
esac

■limits
limits は通常 シェルスクリプト中では次のようにバッククォーテーションに囲み評価するよ うにして使われます。

    eval `limits -e -C daemon`

これで limits の出力が評価され、現在のシェルで設定されます。

■eval
evalは引数の変換を一度に行って実行を行う。たとえば、変数NAME1に「FUKUDA」、NAME2に「NAME1」が入っていた場合とする。この場合で、「NAME2」の変数を利用してNAME1の内容を閲覧したい場合は、使用例のようにevalを利用する。

 使用例  
$ eval echo $"$NAME2"
FUKUDA

2014年2月23日日曜日

■【Windows】
 IF EXIST ファイル名   コマンド [パラメーター]
  ディレクトリの存在をチェックしたい時にはパスの最後に「\」を付ける
    IF   EXIST   C:\TEST\   ECHO C:\TESTフォルダは存在

■特定のフォルダ下に指定のフォルダがあるかを調べる
【Windows】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% GEQ %DIR_PATH% ECHO 以上の同一

【Unix】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% -ge %DIR_PATH% ECHO 以上の同一


■特定フォルダーを除外して圧縮するzipコマンドの例。
【Unix】
zip -r what_ever_you_want.zip ./target_dir/ -x ./target_dir/dont_zip_dir\*
dont_zip_dirフォルダーを除外したtarget_dirまるごとを圧縮する例。


【Unix】
${#NAME} $NAMEの文字数(全角文字も1文字)になる。 echo ${#1}
→$1の文字数が表示される

■Winddowsコマンド解析
http://d.hatena.ne.jp/thinca/20100210/1265813598

■Unixコマンド
【Unix】
http://www.ne.jp/asahi/hishidama/home/tech/unix/command.html

■調査対象がファイルかディレクトリかを自動判別し、サイズを取得する。
【Windows】
@echo off
rem 対象の属性情報取得
set TARGET_NAME=%~a1
rem 対象がディレクトリか否かのチェック
set TARGET_DIR_FLAG=%TARGET_NAME:~0,1%
rem 対象がディレクトリであればジャンプ
if "%TARGET_DIR_FLAG%"=="d" (goto FLAG_DIR_SIZE)

rem 対象ファイルのサイズを取得
for %%A in ("%1") do set FILESIZE=%%~zA
echo 使用量 = %FILESIZE%
goto :EOF

:FLAG_DIR_SIZE
set WKF=__work.txt

dir /-c /s /a-d /w %1 | findstr "個の" > %WKF%
for /f "usebackq tokens=3" %%A in (`
find /c /v "" %WKF%
`) do set /a LC=%%A - 2
for /f "skip=%LC% tokens=1,2,3" %%A in (
%WKF%
) do call :SUB1 "%%A" "%%C"
del %WKF%

echo 使用量 = %NUM1%
echo 空き容量 = %NUM2%
echo ファイル = %NUMF1%
goto :EOF


:SUB1
set NUMF=%~1
set NUMF1=%NUMF2%
set NUMF2=%NUMF%
set NUM=%~2
set NUM1=%NUM2%
set NUM2=%NUM%
goto :EOF

2014年2月16日日曜日

■特定ファイルのサイズ取得

○windows
set ZIP_FILE_LIST=__ work.txt
for %%A in ("%ZIP_FILE_LIST%") do set FILESIZE=%%~zA
echo %FILESIZE%

○Linux
wc -c test.txt | awk '{print $1}'

■main関数の引数の扱いについて
http://www5c.biglobe.ne.jp/~ecb/c/07_05.html

■特定ディレクトリ下に指定ディレクトリがあるかを調べて、その後の処理を行う。
@echo off
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="%MP%\tes t"
set WKF=__work.txt

echo %TARGET_PATH% | findstr /I /C:%DIR_PATH% > %WKF%
for %%A in ("%WKF%") do set FILESIZE=%%~zA
echo %FILESIZE%

if %FILESIZE% EQU 0 goto file_not_find
echo 取得処理を行う


hoge.exe 1> out.txt 2> err.txt
「hoge.exe」が出力する文字列のうち、通常の出力を「out.txt」に、エラー出力を「err.txt」に出力させます。これにより必要な情報をある程度分離させることができます。


echo Error. 1>&2
Echoによる文字出力を標準出力ではなく標準エラー出力に変更します。これはバッチファイル内で特に有効で、例えばこの記述を含むバッチファイルが「aaa.bat」と仮定すると、コマンドプロンプト上で「aaa.bat > NUL」と指定されて実行していても「Error.」という文字列がプロンプト上に出力されるようになります(ただし別の方法で標準エラー出力がリダイレクトされている場合はこの限りではありません)。


type C:\config.sys | more
C:\config.sys を Type コマンドで出力しますが、 More コマンドで、1 画面ごとに出力させます。


echo Y | del "%TEMP%\*.*"
TEMP ディレクトリの中のファイル(ディレクトリを除く)を Del コマンドで削除しますが、"*.*" のように指定すると必ず削除するかどうか尋ねられるので、いつでも「はい」(Y) にしたいとき、Echo コマンドで Y を出力させ、それを「 | 」で応答にさせます。

■1行空ける
echo.

2014年2月11日火曜日

Linux2

Linux2

http://x68000.q-e-d.net/~68user/unix/


basename パス名+ファイル名からパス名を削除する
与えられた文字列の最後の / 以降を表示するコマンドである。


compress ファイルを圧縮する

●オプション
-c 圧縮結果を標準出力に書き出す。ファイル操作は行なわれない。
-f 圧縮ファイルが元ファイルより大きくなっても強制的に圧縮ファイルを作る
-v 圧縮率を表示


cp ファイルをコピーする

●オプション
-i コピー先のファイルが存在する場合、上書きしてよいか確認を求める。
-f 上書き確認を行わない。これはデフォルトだが、alias cp cp -i としている場合に便利
-p タイムスタンプもそのままコピーする
-R ディレクトリを再帰的にコピーする
% cp -R dir1/ dir2
とすると (`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
dir2/foo
dir2/bar
というファイルができる。


df ディスクの使用状況を表示

●オプション
-k 512バイト単位ではなく、1キロバイト単位で表示
-i i-node の消費量も表示
-H 人間が読みやすい単位で表示


du 指定ディレクトリ以下のディスク使用量を再帰的に表示する

-L シンボリックリンクも計算する
-a 各ファイルごとに使用量を表示する
-d 深さ 指定したディレクトリの深さだけしか表示しない。
-k 単位をKBで表示する
-s 指定ディレクトリのサブディレクトリの使用量を表示しない。


****************************************************************
●2GB 問題
Solaris・HP-UX・Linux などの gzip は 2GB 超のファイルに未対応であることが多い。

gzip 自体には「2GB」というファイルサイズの上限はない。また、最近の Solaris・HP-UX・Linux などの OS 自体は 2GB 超のファイルを問題なく扱える。ただし互換性からか、ソースをコンパイルすると、ファイルオフセット (off_t) が 32bit になってしまう環境が多い。このような環境でコンパイルしたバイナリは、gzip に限らず 2GB 超のファイルを生成できないし、既にある 2GB 超のファイルにアクセスすることはできない。

一般的には、コンパイル時に -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE というオプションを付けてコンパイルすればファイルオフセットが 64bit になることが多いようだ (Solaris2.6・Solari8・ HP-UX 11i・Linux で確認。AIX ではちょっと違うらしい)。

世の中で広く使われている gzip のバージョンは 1.2.4 であるが、ファイルオフセットが 32bit な環境で make すると、ファイルオフセットが 32bit な gzip が生成され、2GB 超のファイルを扱うことができない。SunSite や Linux 標準の gzip はこのように make されたものが多いので、2GB 超のファイルに未対応なことが多いのである。この場合、Makefile の CFLAGS に、上記のオプションを追加して再コンパイルすれば解決する。

gzip-1.3.3 の configure は少し賢くて、64bit ファイルポインタが使える場合は上記オプションを勝手に追加してコンパイルしてくれるため、2GB 問題は起こらないだろう。

ちなみに、ファイルオフセットが 32bit なのか 64bit なのかは以下のソースをコンパイルして実行すればわかる。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
main(){
printf("%d\n", sizeof(off_t));
}
出力結果が 4 ならば 32bit、8 ならば 64bit である。4 と表示された場合でも、上記オプションを付けてコンパイルすると、大抵の環境では 8 に変わるだろう (今どきの OS ならば)。
****************************************************************


less ファイル表示プログラム (ページャ)

あるコマンドを実行結果や、ファイルの内容を見たいとき、1画面に収まりきらずスクロールしてしまって最初の部分が見えないことがある。そういう場合、
% ls -l | less

% less file.txt
などとすることでゆっくり見ることができる。


ls ファイル・ディレクトリを表示

-a 「.」 から始まるファイルも表示。「.」「..」も表示する。
-A 「.」 から始まるファイルも表示。「.」「..」は表示しない。
root が ls を実行した場合、常に -A オプションが付けられたものとして動作する。
-l ファイル、ディレクトリの詳細な情報を表示する
-T タイムスタンプを年月日時分秒まで表示 (要 -l オプション)
-o ファイルフラグを表示。BSD 系のみ (要 -l オプション)
>> コマンド chflags *
-1 (マイナスエルじゃなくてマイナスイチ) 1行につき1つのファイルの情報を表示
-C マルチカラムで表示 (-1 の逆)。
% ls | more
などとすると、ls が出力先がパイプだと判断し、自動的に -1 を指定したのと同じように動作するが、-C を付けるとそれを抑制し、1行に複数のファイルを表示する。
-F ファイルタイプの識別子を付ける。
ディレクトリの後ろに「/」、シンボリックリンクの後ろに「@」、実行形式ファイルの後ろに「*」をつける
-L シンボリックリンク自体ではなく、リンク先のファイルの情報を表示
-R 再帰的にディレクトリ以下のファイルを表示する。
つまり ls -R / で全てのファイルが表示されることになる
-c ファイルの変更日時ではなく、最後にファイルステータスを変更した日時を表示
>> 用語集 タイムスタンプ *
-u ファイルの変更日時ではなく、最後にファイルにアクセスした日時を表示
>> 用語集 タイムスタンプ *
-d ディレクトリを指定した場合、ディレクトリ以下のファイルではなくディレクトリ自体の情報を表示。
ls -l /usr/bin は、ls -l /usr/bin/* と同じような動作をするが、ls -ld /usr/bin だと、
drwxr-xr-x 2 bin bin 5120 Oct 7 05:26 /usr/bin
と、ディレクトリ自体の情報を表示する
-f ファイル名をソートせずに表示
-r 逆順にソートして表示
-t ファイルを変更した日時の順でソートする。最近どのファイルが更新されたか調べたいときは
% ls -lt | head
最近どのファイルが参照されたかを調べたいときは
% ls -lut | head
が便利。
-i ファイルの i-node を表示
>> コマンド ln *
-s 各ファイルのファイルシステムブロックの使用量を表示 (512バイト単位)
たとえ1バイトのファイルでも1ブロック (512バイト) を消費している。その消費量を表示する。ブロックの単位は環境変数 BLOCKSIZE で設定できる。
>> 環境変数 BLOCKSIZE *
>> 用語集 穴あきファイル *
-k -s オプションが指定された場合、使用量を 1K バイト単位で表示する
-x ファイルを横方向ではなく、縦方向にソートする
(-x オプションは SystemV 系と GNU の ls のみ)。
-q ファイル・ディレクトリ名の中に表示不可能な文字があった場合、`?' という文字に置き換えて表示する。このオプションはデフォルトで有効になっている。このおかげで日本語を含むファイル名を ls で表示しようとすると、???? などとなってしまう。この機能は、出力先がパイプやファイルだと抑制されるので、
% ls | less
% ls | cat
などとすると、日本語ファイル名を表示できる。


realpath 相対パスを絶対パスに展開する



rm ファイルの削除

-i 1つ1つのファイルについて本当に削除するか確認を求める
-r 再帰的に指定ディレクトリ以下を削除する
-f パーミッションに関係なく全て削除する。


rmdir ディレクトリの削除


split ファイルを複数のファイルに分割する。結合は cat で行う。
-b num numバイトごとに分割
-l num num行ごとに分割

ファイル sample を 1400キロバイトごとに分割するには
% split -b 1400k sample
とする。分割されたファイルは xaa、xab、xac ... となる。結合するには
% cat xaa xab xac > sample
とすればよい(xaa xab xacの順番のとおりに結合される)。


su root (スーパーユーザ) になる。他人の名前でログインする

-f ユーザの .cshrc を読み込む
-l 本当のログインのようにする
HOME、SHELL、PATH、TERM、USER 以外の環境変数の設定は捨てられる
-m 環境変数をそのままに残しておく。
HOME・SELL・USER など、環境変数を元のままにしておく。また、ログインシェルは元のユーザのシェルを使用する。


sudo 他ユーザ権限でコマンドを実行する

●オプション
-l ユーザに許されているコマンドの一覧を表示。
% sudo -l
Password: (パスワードを入力)
You may run the following commands on this host:
(root) /usr/local/sbin/visudo
(root) /sbin/shutdown
この例では、visudo と shutdown コマンドを root 権限で実行することができる。
-b コマンドをバックグラウンドで実行
-u 指定したユーザ権限でコマンドを実行。以下のようにすれば、anotheruser の権限で anycommand が実行できる。
% sudo -u anotheruser anycommand


tar アーカイバ。複数のファイルを1つにまとめる。

命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。

オプション:
f tarファイルを指定する
一見、毎回 f オプションを指定する意味がないように思えるが、本来 tar はテープドライブに書き出すコマンドなので、f でアーカイブ名を指定しないとテープドライブのデバイス /dev/rst0 を対象に読み書きしてしまう。
p パーミッションや owner、group の情報を保存する。
これは展開時にのみ影響する。
v バーボーズモード。処理内容を詳しく表示する
パーミッションなどの詳細な情報が表示されるため、はじめのうちはアーカイブ作成・展開時に tar cvf や tar xvf などと v オプションを付けたくなるかもしれない。しかし、慣れてきたら v オプションを指定しないようにしよう。

なぜなら、アーカイブ作成・展開時に何かのエラーが標準エラー出力に表示されるかもしれないからだ。もし v オプションを付加すると、エラー表示が v オプションによる冗長出力に埋もれて気づかない可能性がある。
z gzip で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ztf foo.tar.gz (gzip -dc foo.tar.gz | tar tf - と同じ)

y bzip2 で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ytf foo.tar.bz2 (bzip2 -dc foo.tar.gz | tar tf - と同じ)

Z compressで圧縮・伸長する
% tar Zxvf foo.tar.Z
⇒ compress で圧縮されている foo.tar.Z を展開する。

O 抽出したファイルを標準出力に出力する (x オプションと併用)
% tar xvfO hoge.tar file1.dat > file2
⇒ hoge.tar から file1.dat を取り出し、file2 というファイル名で保存
C 指定のディレクトリにファイルを展開する
普通に
% tar xvf /dir/foo.tar
とすると、カレントディレクトリにファイルが展開される。/bar/ に展開したい場合は
% tar xvf /dir/foo.tar -C /bar
とする。これは
% (cd /bar ; tar xvf /dir/foo.tar)
と同じ。

カレントディレクトリ以下のファイルを archive.tar にまとめるには
% tar cvf /tmp/archive.tar .

*.tar.gz や *.tgz を扱う場合は z を付ける、ということを覚えておけばい

なお、GNU tar 以外の tar は z オプションがないので、gzip されたファイルを扱うには、以下のようにパイプでつなぐ必要がある。
% tar cvf - . | gzip -c > hoge.tar.gz
⇒ カレントディレクトリ以下を tar でアーカイブし、gzip で圧縮

2014年1月19日日曜日

@echo off

set WKF=_work.txt

dir /s /a-d /w . | findstr "個の" > %WKF%

for /f "usebackq tokens=3" %%A in (`
find /c /v "" %WKF%
`) do set /a LC=%%A - 2

for /f "skip=%LC% tokens=1,2,3" %%A in (
%WKF%
) do call :SUB1 "%%A" "%%C"

del %WKF%

echo ファイル = %NUMF1%
echo 使用量 = %NUM1%

goto :EOF


:SUB1
set NUMF=%~1
set NUMF1=%NUMF2%
set NUMF2=%NUMF%
set NUM=%~2
set NUM1=%NUM2%
set NUM2=%NUM%


■test2.bat
test2.bat test\test.txt
とすることによってファイル内の文字を行毎に表示する。
また、デスクトップにショ-トカットを置き、
そこへファイルをドロップすることによっても同様の結果を得る。
@echo off
echo ------START------
for %%V in (%1) do (
type %%V
)
echo ------END--------
pause

■連結
@echo off
set ZIP_FILE_LIST=zip_file_list.txt
echo ------START------
echo %~a1 | find "d">NUL
if %ERRORLEVEL% EQU 0 (
dir /B /O %1\*.zip.0>%1\%ZIP_FILE_LIST%
) else (
echo 複数に分割された集約ファイルの格納されているディレクトリを指定してください。
goto END
)

for /F "delims=" %%i in (%1\%ZIP_FILE_LIST%) do (
echo %%~niファイルへと連結しました。
)

del %1\%ZIP_FILE_LIST%

:END

echo ------END--------
pause

■WSH

vt1.vbs
Wscript.Echo "メッセージを表示します"

コマンドプロンプトから
cscript vt1.vbs //nologo

http://www.atmarkit.co.jp/ait/articles/0401/15/news084_2.html

■WSHリファレンス
http://msdn.microsoft.com/ja-jp/library/cc364460.aspx



■if /A == /%EV% ( echo EV=A ) else echo EV != A
とすると、環境変数EVの値が“A”のときには、“echo EV=A”が実行され、
そうでないとき(未定義の場合も含む)は、else以降のコマンドが実行される。
ここで、条件部分の左右の辺の先頭に“/”が含まれているが、
これは、EVが未定義のときの対策である。
今回はスラッシュを使ったが、実際には、ほかの文字でもかまわない。
“==”の両辺の式をダブルクオート(“ ”)で囲むスタイルを使う人もいる
(C言語などの文字列のスタイルにならっている)。



基本的には、usebackqを必ず指定することにして、ファイル名は必要に応じてダブルクォート記号で囲み、コマンドならばバッククォート、文字列ならシングルクォート記号で囲む


記号 なし ダブルクォート シングルクォート バッククォート
usebackqなし ファイル名 文字列 コマンド バッククォート記号を含むファイル名
usebackqあり ファイル名 ファイル名 文字列 コマンド
usebackqコマンドとファイル・セット指定の関係

for /F "usebackq delims=" %%i in ("%~1\%ZIP_FILE_LIST%") do (
echo %%~niファイルへと連結しました。
)

■指定フォルダのアレやアレで始まるファイルのリストを作成する

@echo off

set DIR_PATH=%~dp1
echo %DIR_PATH%

set WKF=__work.txt

dir /b /a-d "%DIR_PATH%%~1" | findstr /B "q." > %DIR_PATH%%WKF%
dir /b /a-d "%DIR_PATH%%~1" | findstr /B "w." >> %DIR_PATH%%WKF%

或いは、空白で繋げる

dir /b /a-d "%DIR_PATH%%~1" | findstr /B "q. w." > %DIR_PATH%%WKF%

rem del


■指定フォルダの下を全て取得する為にリストを作るが、特定フォルダ下のみ外す
外すディレクトリを"tes t"だとすると、

dir /s /b /a-d . | findstr /V /C:"tes t"


■指定フォルダの下を取得するにあたり、特定フォルダ下を除外する、というリストを作成
@echo off

set TARGET_PATH="C:\usr\command\tes t\trr"

echo %TARGET_PATH%

set DIR_PATH=%~dp1
echo %DIR_PATH%

set WKF=__work.txt

echo "%~f1"

echo ---
dir /s /b /a-d "%~f1"
echo ---

dir /s /b /a-d "%DIR_PATH%" | findstr /IV /C:%TARGET_PATH%

※ディレクトリを指定する際、最後に\を付けなければならない。

■指定フォルダが、特定フォルダ下に存在しないことの確認
@echo off

set TARGET_PATH="C:\usr\command\tes t"
set DIR_PATH=%~dp1
set WKF=__work.txt

dir /s /b /a-d "%DIR_PATH%" | findstr /I /C:%TARGET_PATH% > %WKF%
call :size_check %WKF%
if %WORK_FILE_SIZE% EQU 0 goto file_not_find
echo 取得処理を行う

:file_not_find
goto :EOF

:size_check
set WORK_FILE_SIZE=%~z1
goto :EOF


2014年1月13日月曜日

Linux

if [ 条件1 ]
then
  処理1
elif [ 条件2 ]
then
  処理2
else
  処理3
fi


case 変数 in
   パターン1) 処理;;
   パターン2) 処理;;
   パターン3 | パターン4) 処理;;
   *) 処理;;
esac

「;;」は「case文を抜ける」という意味です。
「*)」は「いずれのパターンにもあてはまらない場合」という意味で、省略可能です。
パターンを「 | 」で区切って論理和(or)をとることもできます。
また、パターンには正規表現が使えます。

while [ 条件 ]
do
  処理
done

ファイルを1行毎に読み込んで処理させたい場合は、以下のような構文になります。
「line」は変数であり、指定したファイルを1行毎に読み込んで順次「line」に格納されます。
ファイルの終端(EOF)まできたら「while」を抜けます。
while read line
do
  処理(${line}を処理)
done < ファイル

算術演算子 意味
a + b aとbの和
a - b aとbの差
a \* b aとbの積
a / b aとbの商
a % b aとbの剰余


数値評価演算子 意味
数値1 -eq 数値2 数値1と数値2が等しい場合に真
数値1 -ne 数値2 数値1と数値2が等しくない場合に真
数値1 -gt 数値2 数値1が数値2より大きい場合に真
数値1 -lt 数値2 数値1が数値2より小さい場合に真
数値1 -ge 数値2 数値1が数値2より大きいか等しい場合に真
数値1 -le 数値2 数値1が数値2より小さいか等しい場合に真


文字列評価演算子 意味
文字列 文字列の長さが0より大きければ真
-n 文字列 文字列の長さが0より大きければ真
! 文字列 文字列の長さが0であれば真
-z 文字列 文字列の長さが0であれば真
文字列1 = 文字列2 2つの文字列が等しければ真
文字列1 != 文字列2 2つの文字列が等しくなければ真


ファイルチェック演算子 意味
-d ファイル名 ディレクトリなら真
-f ファイル名 通常ファイルなら真
-L ファイル名 シンボリックリンクなら真
-r ファイル名 読み取り可能ファイルなら真
-w ファイル名 書き込み可能ファイルなら真
-x ファイル名 実行可能ファイルなら真
-s ファイル名 サイズが0より大きければ真
ファイル1 -nt ファイル2 ファイル1がファイル2より新しければ真
ファイル1 -ot ファイル2 ファイル1がファイル2より古ければ真

if文やwhile文で、複数の条件を結合(AND,OR)して評価したい場合は、以下のように記述します。

論理結合演算子 意味
! 条件 条件が偽であれば真
条件1 -a 条件2 条件1が真、かつ、条件2が真であれば真
条件1 -o 条件2 条件1が真、または、条件2が真であれば真

#!/bin/sh
while getopts l:t: opt
do
  case ${opt} in
  l)
   LIST=${OPTARG};;
  t)
   TYPE=${OPTARG};;
  \?)
   exit 1;;
  esac
done
echo "LIST=${LIST}"
echo "TYPE=${TYPE}"

$ getopts.sh -l list -t type
LIST=list
TYPE=type
$

ファイルの内容をクリアする。
cat /dev/null > abc.log
または、
:> abc.log

PARA2=string
echo "PARA2 = ${PARA2}"

変数 意味
$$ シェル自身のPID(プロセスID)
$! シェルが最後に実行したバックグラウンドプロセスのPID
$? 最後に実行したコマンドの終了コード(戻り値)
$- setコマンドを使って設定したフラグの一覧
$* 全引数リスト。"$*"のように「"」で囲んだ場合、"$1 $2 … $n" と全引数を一つにくっついた形で展開される。
$@ 全引数リスト。"$@"のように「"」で囲んだ場合、"$1" "$2" … "$n" とそれぞれの引数を個別にダブルクォートで囲んで展開される。
$# シェルに与えられた引数の個数
$0 シェル自身のファイル名
$1~$n シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となる。

rem 不要なファイルを再帰的に検出して削除
for /F "usebackq" %%i in (`dir /s /b /a-D ^| findstr /V ".*\.html$" ^| findstr /V ".*\.css$" `) do (
  rem 削除確認しながら削除
  del /P %%i
)

rem ファイルがあれば削除
if exist %TMP_FILE_NAME% ( del %TMP_FILE_NAME% )


rem カレントフォルダを変数に保持
for /F "usebackq" %%i in (`cd`) do (
  set BAT_DIR="%%i"
)
rem 変数の内容を表示
echo %BAT_DIR%

set today_YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

set now_HHmmSS=%time:~0,2%%time:~3,2%%time:~6,2%


スリープ
5秒待つ:
ping localhost -n 5 > nul


2014年1月5日日曜日

cmd.exe /k "コマンド"

help if

殊なラベル名として“:EOF”がある(ほかのラベルと違って、先頭にコロンが付いていることに注意。すべて小文字で“:eof”としてもよい。EOFはEnd Of Fileの略)。これは、スクリプトの最後の部分を表すもので、処理を終了させる場合の飛び先として利用できる(実際に“:EOF”ラベルをプログラムの最後に置く必要はない)。

for %%代入変数名 in (代入値1 代入値2 代入値3……)do 実行文

for %i in (*.txt) do type %i
“do”以下には、実行するコマンドを記述する。全体を括弧でくくることで複数のコマンドを記述することも可能だ。

スクリプト内では%%となる。
for %%i in (file01.txt file02.txt file03.txt) do type %%i

内容表示:
type tetxt.txt

for %%i in (01 02 03) do type File%%i.txt


for %%i in (01 02 03) do ren File%%i.txt >>ADD.TXT
あるいは、
for %%i in (*) do type %%i >>ADD.TXT
とすることで、すべてのファイル内容を1つのファイル(この例ではADD.TXT)に結合できる。

ディレクトリのみを出力。
for /d %%i in (*) do echo %%i

ディレクトリのみを再帰的に出力。
for /r /d %%i in (*) do echo %%i

if /A == /%EV% ( echo EV=A ) else echo EV != A
今回はスラッシュを使ったが、実際には、ほかの文字でもかまわない。“#”を使う人もいるし、“==”の両辺の式をダブルクオート(“ ”)で囲むスタイルを使う人もいる(C言語などの文字列のスタイルにならっている)。

find "name" text.txt

dir | find /v "ボリューム" | find /v "のディレクトリ" | find /v "個のファイル"