bashでスクリプト書いた時の備忘録

Perl使うにもCPANとか気軽に落としてこれなさそうで、
Rubyとか入ってない環境でスクリプト書くのに、久しぶりにbash使いました。
んま、bashだからどうのって話じゃないですけど、備忘録的に。
 
■ -xでデバッグ情報出しながら開発すべし。
『bash -x スクリプト』って感じで叩くだけで、ズラズラっと出てきます。
条件式で変数を”(ダブルクォート)で囲うとかそういうのでハマったりしてたのですがw
デバッグオプション指定して叩いたら何かとスムーズ。
ファイル名をゴニョゴニョして文字列操作とかもechoしまくるのもアレですが、
↓こんな風にイイ感じに見えます。

+ hoge_name=02011999_1224_HOGEHOGE.gz
++ getYyyymmddhhmm 02011999_1224_HOGEHOGE.gz
+++ cut -c 5-8
++ yyyy=1999
+++ cut -c 1-2
++ mm=02
+++ cut -c 3-4
++ dd=01
+++ cut -c 10-13
++ hhmm=1224
+ hoge_yyyymmddhhmm=199902011224

 
■ SFTPでパスワード渡すオプションがにゃい。
-pとかでイケるのかと思ったらそういうのなくて。
仕方ないので別ファイル化してexpect使いました。
↓のようにSFTPサーバーからlsで古いのから順番に~的な。

#!/usr/bin/expect
set timeout 30
spawn sftp ユーザー@ftpサーバー
expect "password:"
send "パスワード"
expect "sftp>"
send "cd hogen"
expect "sftp>"
send "ls -ltrn"
expect "sftp>"
send "byen"

大きいファイルを取ってくる時にタイムアウトしちゃってるの気付かず…。(デフォルトは10秒っぽい)
『set timeout 秒数』で多めに時間を確保しておく必要がありやす。
でもって、Proxyサーバー越しに叩きたい場合にexport ftp_proxyとかって
設定すりゃイイのかと思ったら、まぁsshですもんねって話で↓てな具合で。

sftp -o "ProxyCommand connect -S プロキシサーバー:ポート %h %p" FTPサーバー FTPポート

sftpの-oはman見るとssh_optionってなってて、sftp -oPort=24みたいな事が出来るって
書いてあるのですが、オプションのリストの中にProxyCommandってのがあって、それを利用しやす。
connectってのはソケットで接続する用のLinuxのコマンドで
man叩くとSオプションで↓こんな感じ

-S specifies the hostname and port number of the SOCKS server to relay.

%hと%pはホストとポートを実際に叩くときに置換してーって事になります。
この設定を~/.ssh/configに書いておくのがシャレオツっぽいのですが、
別のサーバーにこのスクリプトを移設する事も今後ありえるので.expファイルの中にグワっと…。
 
■ awkで取ってくる時に行の最後の要素だったら改行コード気つける。
一致するはずなのに、なんか一致しないなーと思って上記の-xでデバッグ情報みてたら、
最後に”r”とか付いてて一致しないじゃないのよ、と。
↓こんな感じでスペース区切りで取ってきて、要素の改行部分を無かった事にしたりして。

hoge=`echo $line | awk -F" " '{sub(/r/,"",$99);print $99}'`

 
■ 条件式はググる感じすかね…。
-leがどうでとか、-gtがどうでとか、、こういうのはさすがに
普段使いしてないとパッと出てこないかなと。。
↓の『if 文と test コマンド』というページがナイスでした~
http://shellscript.sunone.me/if_and_test.html
 
■ その他
hoge_message=”hogehoge” とかって代入して
echo $massage とかって標準出力に出そうとしたら、
出てこねーなー、とか…。変数名がメッセージとマッサージ間違ってるお、と。
疲れてんのかなー。マッサージでも行きますかねーw
 
 
前の会社にいた頃、師匠が隣の席で↓読みながらイカしたスクリプト組んでたの思い出すな~

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
ブルース ブリン
ソフトバンククリエイティブ
売り上げランキング: 14841

コメント

  1. sekimura より:

    “-e errexit” もお勧めです。失敗した所で止まってくれます。

  2. shinodogg より:

    おぉ。勉強になります。ありがとうございます!
    わざとコケるようにして叩いてみたら、そこで止まってくれました。

タイトルとURLをコピーしました