shell

「shell」の編集履歴(バックアップ)一覧はこちら

shell」(2008/02/29 (金) 11:23:58) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

if 構文 if 条件 then 条件が成立した時に実行するコマンド else 条件が不成立の時に実行するコマンド fi 例 if [ -n ${TEST}] then echo 'this is true' else echo 'this is false' fi 条件 ファイル形式のチェック -b ファイル名 指定したファイルがブロックデバイスファイルなら真である。 -c ファイル名 指定したファイルがキャラクタデバイスファイルなら真である。 -d ファイル名 指定したファイルがディレクトリなら真である。 -f ファイル名 指定したファイルが通常ファイルなら真である。 -L ファイル名 指定したファイルがシンボリックリンクなら真である。 -p ファイル名 指定したファイルが名前付きパイプなら真である。 -S ファイル名 指定したファイルがソケットなら真である。 ファイルパーミッションのチェック -g ファイル名 指定したファイルにSGIDがセットされていれば真である。 -k ファイル名 指定したファイルにスティッキービットがセットされていれば真である。 -r ファイル名 指定したファイルが読み取り可能なら真である。 -u ファイル名 指定したファイルにSUIDがセットされていれば真である。 -w ファイル名 指定したファイルが書き込み可能なら真である。 -x ファイル名 指定したファイルが実行可能なら真である。 その他のファイルのチェック -e ファイル名 指定したファイルが存在すれば真である。 -s ファイル名 指定したファイルのファイルサイズが0より大きければ真である。 文字列のチェック -n 文字列 文字列の長さが0より大きければ真である。 -z 文字列 文字列の長さが0であれば真である。 文字列1 = 文字列2 2つの文字列が等しければ真である。 文字列1 != 文字列2 2つの文字列が等しくなければ真である。 数値のチェック 数値1 -eq 数値2 2つの数値が等しければ真である。 数値1 -ge 数値2 数値1が数値2以上であれば真である。 数値1 -gt 数値2 数値1が数値2より大きいのであれば真である。 数値1 -le 数値2 数値1が数値2以下であれば真である。 数値1 -lt 数値2 数値1が数値2未満であれば真である。 数値1 -ne 数値2 2つの数値が等しくなければ真である。 論理結合 !条件 条件が偽であれば真である。 条件1 -a 条件2 条件1と条件2の両方が真であれば真である。 条件1 -o 条件2 条件1と条件2のどちらかが真であれば真である コマンドの処理時間を測定する 構文 time [コマンド] 例 テキストファイルのSQLを1文字づつ取得し、最後に「;」来るまで連結する。 そのSQLをDBで実行し、timeで処理時間を計測する。 #!/bin/sh MYSQL_PASSWD=$1 MYSQL_DBNAME=roomie SQL_FILE=/tmp/sql.txt if [ $# -ne 1 ]; then echo 'Usage: ./sql.sh [MySQL_ROOT_PASSWD]' exit fi for UNIQUE_ID in `cat $SQL_FILE` do FLG_GREP=`echo "${SQL}" | grep -c ".*;"` if [ ${FLG_GREP} -eq 0 ]; then SQL="${SQL} ${UNIQUE_ID}" else echo "${SQL}" time mysql ${MYSQL_DBNAME} -uroot -p${MYSQL_PASSWD} -NB -e "${SQL}" >/dev/null 2>&1 if [ -n ${UNIQUE_ID} ]; then SQL="${UNIQUE_ID}" else SQL="" fi fi done /tmp/sql.txtの内容 select u_id from tbl_user_master; select passwd from tbl_passwd_master; timeの結果をリダイレクトする場合は以下のようにする 括弧でくくらないとダメらしい。 (time echo 'Hello World') 2>/tmp/log.txt もう1個時間計測(date使ったタイプ) #!/bin/sh MYSQL_PASSWD=$1 MYSQL_DBNAME=roomie SQL_FILE=/tmp/sql.txt LOG_TEXT=/tmp/result_sql.txt echo '---- TestSQL for DB performance tuning ----' if [ $# -ne 1 ]; then echo 'Usage: ./sql.sh [MySQL_ROOT_PASSWD]' exit fi for UNIQUE_ID in `cat $SQL_FILE` do FLG_GREP=`echo "${SQL}" | grep -c ".*;"` if [ ${FLG_GREP} -eq 0 ]; then SQL="${SQL} ${UNIQUE_ID}" else echo "${SQL}" >>${LOG_TEXT} START=`date +%s` mysql ${MYSQL_DBNAME} -uroot -p${MYSQL_PASSWD} -NB -e "${SQL}" >/dev/null 2>&1 END=`date +%s` SS=`expr ${END} - ${START}` echo 'start ->' `date` echo 'finish ->' `date` echo 'the time required -> '"${SS}" '[s]' if [ -n ${UNIQUE_ID} ]; then SQL="${UNIQUE_ID}" else SQL="" fi fi done -------- for -------------------------------- 構文 for 変数 in 引数… do 繰り返し実行されるコマンド done 例 SQL_FILEに文字がある限りループ (1行づつ読み込む?) for UNIQUE_ID in `cat $SQL_FILE` do echo '${UNIQUE_ID}' done SQL_FILEの内容が以下のような場合 select u_id from tbl_user_master; 結果は下記のようになる select u_id from tbl_user_id;
if 構文 if 条件 then   条件が成立した時に実行するコマンド else   条件が不成立の時に実行するコマンド fi 例 if [ -n ${TEST}] then echo 'this is true' else echo 'this is false' fi 条件 ファイル形式のチェック -b ファイル名 指定したファイルがブロックデバイスファイルなら真である。 -c ファイル名 指定したファイルがキャラクタデバイスファイルなら真である。 -d ファイル名 指定したファイルがディレクトリなら真である。 -f ファイル名 指定したファイルが通常ファイルなら真である。 -L ファイル名 指定したファイルがシンボリックリンクなら真である。 -p ファイル名 指定したファイルが名前付きパイプなら真である。 -S ファイル名 指定したファイルがソケットなら真である。 ファイルパーミッションのチェック -g ファイル名 指定したファイルにSGIDがセットされていれば真である。 -k ファイル名 指定したファイルにスティッキービットがセットされていれば真である。 -r ファイル名 指定したファイルが読み取り可能なら真である。 -u ファイル名 指定したファイルにSUIDがセットされていれば真である。 -w ファイル名 指定したファイルが書き込み可能なら真である。 -x ファイル名 指定したファイルが実行可能なら真である。 その他のファイルのチェック -e ファイル名 指定したファイルが存在すれば真である。 -s ファイル名 指定したファイルのファイルサイズが0より大きければ真である。 文字列のチェック -n 文字列 文字列の長さが0より大きければ真である。 -z 文字列 文字列の長さが0であれば真である。 文字列1 = 文字列2 2つの文字列が等しければ真である。 文字列1 != 文字列2 2つの文字列が等しくなければ真である。 数値のチェック 数値1 -eq 数値2 2つの数値が等しければ真である。 数値1 -ge 数値2 数値1が数値2以上であれば真である。 数値1 -gt 数値2 数値1が数値2より大きいのであれば真である。 数値1 -le 数値2 数値1が数値2以下であれば真である。 数値1 -lt 数値2 数値1が数値2未満であれば真である。 数値1 -ne 数値2 2つの数値が等しくなければ真である。 論理結合 !条件 条件が偽であれば真である。 条件1 -a 条件2 条件1と条件2の両方が真であれば真である。 条件1 -o 条件2 条件1と条件2のどちらかが真であれば真である コマンドの処理時間を測定する 構文 time [コマンド] 例 テキストファイルのSQLを1文字づつ取得し、最後に「;」来るまで連結する。 そのSQLをDBで実行し、timeで処理時間を計測する。 #!/bin/sh MYSQL_PASSWD=$1 MYSQL_DBNAME=roomie SQL_FILE=/tmp/sql.txt if [ $# -ne 1 ]; then echo 'Usage: ./sql.sh [MySQL_ROOT_PASSWD]' exit fi for UNIQUE_ID in `cat $SQL_FILE` do FLG_GREP=`echo "${SQL}" | grep -c ".*;"` if [ ${FLG_GREP} -eq 0 ]; then SQL="${SQL} ${UNIQUE_ID}" else echo "${SQL}" time mysql ${MYSQL_DBNAME} -uroot -p${MYSQL_PASSWD} -NB -e "${SQL}" >/dev/null 2>&1 if [ -n ${UNIQUE_ID} ]; then SQL="${UNIQUE_ID}" else SQL="" fi fi done /tmp/sql.txtの内容 select u_id from tbl_user_master; select passwd from tbl_passwd_master; timeの結果をリダイレクトする場合は以下のようにする 括弧でくくらないとダメらしい。 (time echo 'Hello World') 2>/tmp/log.txt もう1個時間計測(date使ったタイプ) #!/bin/sh MYSQL_PASSWD=$1 MYSQL_DBNAME=roomie SQL_FILE=/tmp/sql.txt LOG_TEXT=/tmp/result_sql.txt echo '---- TestSQL for DB performance tuning ----' if [ $# -ne 1 ]; then echo 'Usage: ./sql.sh [MySQL_ROOT_PASSWD]' exit fi for UNIQUE_ID in `cat $SQL_FILE` do FLG_GREP=`echo "${SQL}" | grep -c ".*;"` if [ ${FLG_GREP} -eq 0 ]; then SQL="${SQL} ${UNIQUE_ID}" else echo "${SQL}" >>${LOG_TEXT} START=`date +%s` mysql ${MYSQL_DBNAME} -uroot -p${MYSQL_PASSWD} -NB -e "${SQL}" >/dev/null 2>&1 END=`date +%s` SS=`expr ${END} - ${START}` echo 'start ->' `date` echo 'finish ->' `date` echo 'the time required -> '"${SS}" '[s]' if [ -n ${UNIQUE_ID} ]; then SQL="${UNIQUE_ID}" else SQL="" fi fi done -------- for -------------------------------- 構文 for 変数 in 引数… do 繰り返し実行されるコマンド done 例 SQL_FILEに文字がある限りループ (1行づつ読み込む?) for UNIQUE_ID in `cat $SQL_FILE` do echo '${UNIQUE_ID}' done SQL_FILEの内容が以下のような場合 select u_id from tbl_user_master; 結果は下記のようになる select u_id from tbl_user_id;

表示オプション

横に並べて表示:
変化行の前後のみ表示: