bash

「bash」の編集履歴(バックアップ)一覧に戻る

bash - (2016/04/14 (木) 18:29:04) のソース

-正規表現で文字列が含まれるのかを確認して、値を抜き出す
BASH_REMACHという特別な変数を参照する
 if [[ "asd1234567890_1234" =~ ([0-9]{5})([0-9]{5})_1234 ]];
 then
  echo ${BASH_REMATCH[0]};
  echo ${BASH_REMATCH[1]};
  echo ${BASH_REMATCH[2]};s
 fi

実行
 $ bash a.sh
 1234567890_1234
 12345
 67890

-関数の書き方

 #!/bin/bash
 
 if test `whoami` != 'root'; then
  echo "rootユーザで起動してください。"
  exit 1;
 fi
 
 echo "shellの引数1 = $1"
 #戻り値設定用変数
 rtn=""
 func() {
 echo "引数1 = $1"
 echo "引数2 = $2"
   # 関数内で戻り値設定用変数に戻り値を設定する
   return 0
 }
 func "aaa" "bbb"
 RET_CODE=$?
 
 echo "戻り値=$RET_CODE"
 if [ $RET_CODE -eq 0 ]
 then
   echo ok
 else
   echo ng
 fi
実行結果
[root@localhost]# ./b.sh  123
shellの引数1 = 123
引数1 = aaa
引数2 = bbb
戻り値=0
ok

-デバッグ方法
"-x"付きで起動する
 bash -x デバッグするシェルスクリプト

-ある程度まとまった引数をコマンドに渡す方法
 mysql -u root -ppassword hogedb<<EOF
  CREATE TABLE tbl_a AS SELECT * FROM tbl_b limit 1;
  delete from tbl_a
 EOF
 RET_CODE=$?
 if [[ ${RET_CODE} -ne 0 ]];then
   echo "tbl_aの作成に失敗しました:$RET_CODE"
   return 1
 fi
例は、テーブルをコピーしつつ、データを削除する方法
EOFという文字列(先頭に空白を入れては駄目)が来るまで何行でも記載できる

-ログに標準出力(1)と標準エラー(2)出力の両方をリダイレクトする
 スクリプト > ログファイル名 2>&1

-for分で指定回数だけまわす簡単な方法
 $ for i in `yes |head -2`
 do
 	echo $i
 done
実行結果は下記のとおり。$iは同じものが入ってしまうので、使えないが、head -nで指定したn回分だけまわしたい時は、これが一番単純かな?
y
y

2014/10/22