bash/sh

シェルスクリプト初心者の備忘録
  • 公式マニュアル
  • 変数定義済み判定
    • 変数が定義されているか確認する方法
    • 例:
    • 1 #/bin/bash
    • 2
    • 3 TEST="aa"
    • 4 if test -v TEST; then
    • 5     echo "\$TEST: $TEST"
    • 6 fi
    • 7 exit
    • 出力
    • $TEST: aa
  • 置換
    • 文字列置換はsedでもできるがbashにもそのような機能が存在する
      • ${parameter/pattern/string}
    • デフォでは1個目のマッチの置換しか行わないがpatternを/で始めると全部の置換を行う
    • 例:
      • スクリプト
      • #/bin/bash
      • TEMP='AB C D E'
      • echo $TEMP
      • echo ${TEMP/ /}
      • echo ${TEMP// /}
      • echo $TEMP | sed 's/ //g'
      • exit
      • 出力
      • AB C D E
      • ABC D E
      • ABCDE
      • ABCDE
  • for ループ
    • シェル・スクリプトでDBから取り出したレコードに対して処理を行うコードを書く時
      • QUERY="SELECT title FROM sample_table;"
      • for TITLE in `echo $QUERY | sqlite3 sample_db.sqlite3 | head -3`
      • do
      •     echo $TITLE
      • done
    • これでは単語毎に改行されて出力される
    • 標準デリミタ環境変数IFSにスペース、タブ、改行が登録されているためである
    • よって、IFS=$'\n'と設定することで動k・・・かない
    • IFS='
      'と設定したら動いた。
  • 引数:$1 $2 $3 $4 
    • ./test.sh abc def ghia
    • 上記の実行だと$1にabc, $2にdef・・・格納されていく
  • if文
    • if [ 条件文 ]
    • 条件文は特殊で比較などは if [ $Allowance -lt $Satisfactory ]でif(Allowance < Staisfactory)といった形になる。
      • どうもシェルスクリプトは区切りスペースにはやかましいみたいで if [ がくっついてたら怒られる。これに気づくのにかなり時間かかった。
    • 他の比較演算子は検索するとたくさん出てくる
    • [条件文]のことをtestコマンドと呼ぶらしい。test 条件文 の代替となるから?

Comments