ラベル shell の投稿を表示しています。 すべての投稿を表示
ラベル shell の投稿を表示しています。 すべての投稿を表示

2011年12月30日金曜日

パスワードを埋め込みのshellスクリプト。lftpで複数ファイルをダウンロード

パスワードを埋め込みのshellスクリプト。lftpで複数ファイルをダウンロード。
sftpは必要(通常ある)、lftpがなければyumでインストル

$ yum install lftp

ダウンロードするファイル名はyyyymmddのワイルドカードですが,日付の正確性はチェックしない。
以下スクリプトの内容:

#!/bin/bash
#ローカル保存フォルダー
SAVE_FILE_DIR="~/downloaded"

#今日の日付のyyyymmddファイル、不採用なのではコメントアウト
#TARGET_FILE="DATA_$(date "+%Y%m%d").csv"

#ファイル名がDATA_yyyymmdd.csvのファイルをすべて
TARGET_FILE="DATA_[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9].csv"

HOST=myhost
ACCOUNT=user
PASSWORD=pass

#まず既に存在していたら削除する
rm -f ${SAVE_FILE_DIR}/${TARGET_FILE}

#sftからダンロード
lftp -u ${ACCOUNT},${PASSWORD} sftp://${HOST} <<__LUCEN
lcd ${SAVE_FILE_DIR}
mget ${TARGET_FILE}
quit
__LUCEN

fileの存在するかどうかを判断するshell script

fileの存在するかどうかを判断するshell script

#!/bin/bash
if [ -f filename ]
then
echo "filename exists"
fi

2011年6月23日木曜日

shellのいろいろ基礎

常識かもしれないが、知らないと大変

変数とコマンド

#!/bin/bash
#変数に値を入れるとき=の前後スペースあってはならない
NAME="jacky"

#変数に値を入れるとき、$はいらない、変数を参照するときは$をつく
echo $NAME

#こういう書き方もあり
echo ${NAME}

#コマンドを使うときは`command`、または$(command)
echo `date "+%Y/%m/%d %H:%M:%S"` hello! $NAME


配列

#配列の一括定義
TODO=( lunch work milk walk )

#配列の個別定義
TODO[4]=5

#配列要素のfor..in..do
echo ${TODO[@]}
for o in ${TODO[@]}
do
echo $o
done


if文、case文、比較

#文字列の比較には、=の前後スペース無くてはならない
#また""を付けた方がいいです。unary operator expectedというエラーがでるので
if [ "${TODO[1]}" = "work" ]; then
echo "have to work"
elif [ "${TODO[1]}" = "play" ]; then
echo "can go play"
else
echo "have a rest"
fi

#数値の比較は=ではない
if [ ${TODO[4]} -gt 3 ]; then
echo "5 is greater then 3"
else
echo "unpossible"
fi

#ORなど論理計算
if [ "a" = "b" -o 1 -lt 2 ];
then
echo "ok"
else
echo "ng"
fi

#case文、第一引数
case $1 in
"help")
echo "help me!"
;;
"bye")
echo "byebye!"
;;
"")
echo "enter something!"
;;
*)
echo "anything else"
;;
esac


SQL実行

MYSQL_USER="user"
MYSQL_PASS="pass"
MYSQL_DB="test"
MYSQL_HOST="localhost"

#select * from...にすると、*がカレントディレクトリのファイル名になってしまうのでご注意
RUNME="select id,name from funds limit 10"
echo $RUNME|mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB


実行後結果

# ./test.sh help
jacky
jacky
2011/06/23 10:59:48 hello! jacky
lunch work milk walk 5
lunch
work
milk
walk
5
have to work
5 is greater then 3
ok
help me!
id name
1 ?????????
2 ?????????
3 ?????????
4 ?????????
5 ?????????
6 ?????????
7 ?????????
8 ?????????
9 ?????????
10 ?????????

2011年6月22日水曜日

shellのYYYYMMフォマットチェック、正確性はチェックしないよ!

もし第4引数がYYYYMMの形、且つ先月末以降に指定した場合はエラー
指定してなければ、先月末をデフォルトに設定

if [[ $4 =~ "^(19|20)[0-9]{2}(0[1-9]|1[0-2])$" ]]; then
YYYYMM=$4
if [[ $YYYYMM -ge $(date '+%Y%m') ]]; then
echo "先月以前の日付で指定してください。"
exit
fi
else
YYYYMM=$(date -d"1 month ago" "+%Y%m")
fi