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


0 件のコメント:

コメントを投稿