UNIX/common/シェルプログラミング
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
-とかく忘れがちなシェルプログラミングの文法などのまとめ
#contents
-bashとかは便利だけど常に入っているとは限らない。どこでも...
*注意事項 [#v5834160]
スペースの有無でエラーになったりするので注意
たとえばif文は
-これはOK
if [ $# -ne 2 ]; then
-]の前にスペースがなく、これだけでNG
if [ $# -ne 2]; then
*引数の処理 [#j2ee8047]
**デフォルト値の設定 [#p7f82229]
-設定されていないときにhogeが初期値となる。
ARG1=${1:-hoge}
**引数を取得 [#qa0fe686]
引数は順番に$1,$2,$3・・・・と取得できる
-一つ目の引数を表示
echo $1
**4番目以降の引数を一気に取得 [#w6f15015]
VARIABLE_ARGS=${@:4}
**コマンド引数チェック [#na889800]
-引数のNULLチェック
# nullだったら実施するパターン
if [ ! $1 ]; then
echo "PLEASE INPUT ARGUMENTS!"
fi;
-2個でなかった場合使用方法を表示して抜けるサンプル
if [ $# -ne 2 ]; then
echo "利用方法 $0 引数1 引数2"
exit
fi
**変数の長さ [#q2e8e481]
${#変数名}
*繰り返し処理 [#pe2c0147]
**繰り返し処理 基本 [#xa1ee348]
-a b cを一行ずつ表示する
for FILE in a b c
do
echo ${FILE}
done
**繰り返し処理 コマンド実行結果[#v9cf52d9]
TARGET_FILES=`ls *`
for FILE in ${TARGET_FILES}
do
echo ${FILE}
done
#こっちのほうが楽?
for textfile in $( ls . ); do
echo "${textfile}"
done
-複数の決まっているファイルを処理したい場合は"a b c"の様...
**ファイルを読み込んで繰り返し(catはメモリ食うのでNG) [#...
while read x; do
echo $x
done < $1
**繰り返し処理応用バージョン ファイルの中身を読み込んで...
-行の中にタブ空白が含まれない場合
for filename in `cat ファイル名`
do
echo $filename
done
-行の中にタブ空白が含まれる場合はこちら
while read line ; do
echo ${line}
done < ファイル名
*if文 [#cfe30026]
-基本構文
if [ -f $RESULT ]; then
echo "TRUE"
else
echo "FALSE"
fi;
-else if はelifになる。
if [ -f $RESULT ]; then
echo "TRUE"
elif [ 条件 ]; then
echo "FALSE"
else
echo "FALSE"
fi;
-文字列比較
if [ $STR = "比較対象" ]; then
-ファイルが存在したらその中身を変数に入れる
if [ -f $RESULT ]; then
PRE_RESULT=`cat $RESULT`
fi;
-ファイルが存在しない場合のチェック
if [ ! -f $RESULT ]; then
PRE_RESULT=`cat $RESULT`
fi;
-空変数チェック
if [ -z "${WEBAPPS}" ]; then
echo "変数が空です"
fi
-ディレクトリ存在チェック、なければ処理をしない
if [ ! -d "/var/tmp" ]; then
echo "/var/tmp does not exist!"
return
fi
-複数条件
if [ ! -d "/var/tmp" -o ! -d "/var/tmp2" ]; then
echo "/var/tmp or /var/tmp2 do not exist!"
return 1
fi
*case文 [#yf89cecd]
-キーから文字を読み込んで分岐させる処理、Javaと違ってcase...
#!/bin/bash
# read key input from stdin
read key
# do command
case "$key" in
"1" ) echo "statement1"
echo "statement2";;
"2" ) echo "end sign is ;;";;
*) echo "一致するものがないときはここ"
break ;;
esac
**コマンドを実行してリターンコードの判定例 [#c56d26a1]
-lsを実行して失敗したらメッセージを出す例
ls hoge
if [ $? -ne 0 ]; then
echo "ERROR!!"
exit
fi;
*関数(サブルーチン、プロシージャ)の定義 [#i18840e1]
# 引数は$1,$2でつかえる。呼び出し前に定義しておく必要が...
doCheck() {
echo $1
}
# 呼び出しは関数名と引数をスペース区切りで
doCheck hogehogehoge fugafuga
-関数だけ作ったファイルを外だししておくと便利。呼び出すに...
source ./function.sh
*応用編(上記の合わせ技) [#baa83301]
-引数チェック、ディレクトリ判定、ファイルループなど。引数...
#!/bin/sh
SRC_DIR=$1
DST_DIR=$2
LIST=$3
if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
echo "コピー元、コピー先、ファイル名の引数のいずれかが...
exit 1
fi
while read line ; do
DIR_NAME=`dirname ${line}`
if [ ! -e "${DST_DIR}${DIR_NAME}" ]; then
mkdir -p ${DST_DIR}${DIR_NAME}
fi
FILE_NAME=`filename ${line}`
echo cp ${SRC_DIR}${line} ${DST_DIR}${line}
done < ${LIST}
*その他 [#l7a527c4]
**ファイルに日付時刻の接尾語をつける。 [#w7c8d094]
SUFFIX=` date '+%Y%m%d%H%M%S'`
echo "TEST" > hoge_${SUFFIX}
-フォーマットするなら以下のようにする(ファイル名には不適...
date '+%Y-%m-%d %H:%M:%S'
#counter
終了行:
-とかく忘れがちなシェルプログラミングの文法などのまとめ
#contents
-bashとかは便利だけど常に入っているとは限らない。どこでも...
*注意事項 [#v5834160]
スペースの有無でエラーになったりするので注意
たとえばif文は
-これはOK
if [ $# -ne 2 ]; then
-]の前にスペースがなく、これだけでNG
if [ $# -ne 2]; then
*引数の処理 [#j2ee8047]
**デフォルト値の設定 [#p7f82229]
-設定されていないときにhogeが初期値となる。
ARG1=${1:-hoge}
**引数を取得 [#qa0fe686]
引数は順番に$1,$2,$3・・・・と取得できる
-一つ目の引数を表示
echo $1
**4番目以降の引数を一気に取得 [#w6f15015]
VARIABLE_ARGS=${@:4}
**コマンド引数チェック [#na889800]
-引数のNULLチェック
# nullだったら実施するパターン
if [ ! $1 ]; then
echo "PLEASE INPUT ARGUMENTS!"
fi;
-2個でなかった場合使用方法を表示して抜けるサンプル
if [ $# -ne 2 ]; then
echo "利用方法 $0 引数1 引数2"
exit
fi
**変数の長さ [#q2e8e481]
${#変数名}
*繰り返し処理 [#pe2c0147]
**繰り返し処理 基本 [#xa1ee348]
-a b cを一行ずつ表示する
for FILE in a b c
do
echo ${FILE}
done
**繰り返し処理 コマンド実行結果[#v9cf52d9]
TARGET_FILES=`ls *`
for FILE in ${TARGET_FILES}
do
echo ${FILE}
done
#こっちのほうが楽?
for textfile in $( ls . ); do
echo "${textfile}"
done
-複数の決まっているファイルを処理したい場合は"a b c"の様...
**ファイルを読み込んで繰り返し(catはメモリ食うのでNG) [#...
while read x; do
echo $x
done < $1
**繰り返し処理応用バージョン ファイルの中身を読み込んで...
-行の中にタブ空白が含まれない場合
for filename in `cat ファイル名`
do
echo $filename
done
-行の中にタブ空白が含まれる場合はこちら
while read line ; do
echo ${line}
done < ファイル名
*if文 [#cfe30026]
-基本構文
if [ -f $RESULT ]; then
echo "TRUE"
else
echo "FALSE"
fi;
-else if はelifになる。
if [ -f $RESULT ]; then
echo "TRUE"
elif [ 条件 ]; then
echo "FALSE"
else
echo "FALSE"
fi;
-文字列比較
if [ $STR = "比較対象" ]; then
-ファイルが存在したらその中身を変数に入れる
if [ -f $RESULT ]; then
PRE_RESULT=`cat $RESULT`
fi;
-ファイルが存在しない場合のチェック
if [ ! -f $RESULT ]; then
PRE_RESULT=`cat $RESULT`
fi;
-空変数チェック
if [ -z "${WEBAPPS}" ]; then
echo "変数が空です"
fi
-ディレクトリ存在チェック、なければ処理をしない
if [ ! -d "/var/tmp" ]; then
echo "/var/tmp does not exist!"
return
fi
-複数条件
if [ ! -d "/var/tmp" -o ! -d "/var/tmp2" ]; then
echo "/var/tmp or /var/tmp2 do not exist!"
return 1
fi
*case文 [#yf89cecd]
-キーから文字を読み込んで分岐させる処理、Javaと違ってcase...
#!/bin/bash
# read key input from stdin
read key
# do command
case "$key" in
"1" ) echo "statement1"
echo "statement2";;
"2" ) echo "end sign is ;;";;
*) echo "一致するものがないときはここ"
break ;;
esac
**コマンドを実行してリターンコードの判定例 [#c56d26a1]
-lsを実行して失敗したらメッセージを出す例
ls hoge
if [ $? -ne 0 ]; then
echo "ERROR!!"
exit
fi;
*関数(サブルーチン、プロシージャ)の定義 [#i18840e1]
# 引数は$1,$2でつかえる。呼び出し前に定義しておく必要が...
doCheck() {
echo $1
}
# 呼び出しは関数名と引数をスペース区切りで
doCheck hogehogehoge fugafuga
-関数だけ作ったファイルを外だししておくと便利。呼び出すに...
source ./function.sh
*応用編(上記の合わせ技) [#baa83301]
-引数チェック、ディレクトリ判定、ファイルループなど。引数...
#!/bin/sh
SRC_DIR=$1
DST_DIR=$2
LIST=$3
if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
echo "コピー元、コピー先、ファイル名の引数のいずれかが...
exit 1
fi
while read line ; do
DIR_NAME=`dirname ${line}`
if [ ! -e "${DST_DIR}${DIR_NAME}" ]; then
mkdir -p ${DST_DIR}${DIR_NAME}
fi
FILE_NAME=`filename ${line}`
echo cp ${SRC_DIR}${line} ${DST_DIR}${line}
done < ${LIST}
*その他 [#l7a527c4]
**ファイルに日付時刻の接尾語をつける。 [#w7c8d094]
SUFFIX=` date '+%Y%m%d%H%M%S'`
echo "TEST" > hoge_${SUFFIX}
-フォーマットするなら以下のようにする(ファイル名には不適...
date '+%Y-%m-%d %H:%M:%S'
#counter
ページ名: