NIKKI

勉強します。

Linux4

fjord boot camp

引き続き新しいLinuxの教科書 | 三宅 英明, 大角 祐介 |本 | 通販 | Amazon を読み進める。

cut

  • 入力行の一部分を切り出して出力する
  • cut -d 区切り文字 -f フィールド番号 ファイル名
    • cut -d , -f 3 file.csv
    • 区切り文字を,に3番目のフィールドだけを出力する。
    • デフォルトの区切り文字はタブ
    • フィールド番号は,で繋げて複数選択可能

tr

  • tr 置換前 置換後
  • a-z小文字、A-Z大文字
  • tr -d 削除文字で消したい文字を削除できる

tail

  • tail -f ファイル名でファイル内容が書き換えられるとリアルタイムで表示される。

diff

  • a(ddition),d(elete),c(hange).
  • <(削除された行),>(追加した行)
  • 差分表示のひとかたまりをhunkという。
  • -uユニファイド形式

grep

  • grep オプション 検索パターン ファイル名で文字列検索
  • -nで行番号表示、-iで大文字小文字区別せずに検索
  • -vでマッチしなかった行を表示させる。
  • -qでコマンドの終了ステータスだけを利用する

正規表現

  • ' 'で囲んで使用する
  • .は任意の一文字を意味する。\\.orgなど検索可能
  • [ ]でいずれかに一致、で検索可能。
    • grep 't[ef]st' example.txttest``tfstに一致するものを検索
  • ^で指定した文字以外をマッチ
    • grep 'mail[^13]' example.txtmail1``mail3という文字列以外で検索
    • 1文字目に持っていくと行頭を意味する。行末は$
  • ^$で空行を取り除いて表示
  • *は直前の文字の0回以上の繰り返しを意味する。0回=直前の文字がなくてもOK
    • ’.*’で任意の文字が0回以上=あらゆる文字列にマッチ

拡張正規表現

  • +直前の文字の1回以上の繰り返し。
  • -Eオプションをつけて使用する
  • ?直前の文字の0回または1回の繰り返し
  • {m,n}直前の文字をm回以上n回以下の繰り返し。

メタ文字まとめ

正規表現 拡張正規表現 意味
* * 0回以上の繰り返し
なし + 1回以上の繰り返し
なし ? 0回または1回の繰り返し
{m,n} {m,n} m回以上n回以下の繰り返し
{m} {m} m回の繰り返し
{m,} {m,} m回以上の繰り返し
() () ()内の文字を繰り返し対象にする
なし m|n mもしくはnにマッチする。or条件

sed

  • StreamEDitor。編集結果を標準出力に出力するため元ファイルは変更しない。
  • sed オプション スクリプト 対象ファイル
  • d=削除、
    • アドレス範囲はm,nで指定可能
    • 正規表現を使うときは//で囲む
  • p=行を表示する。-nオプションと同時利用で特定の行だけを表示する
  • s=行置換。sed s/置換前文字列/置換後文字列/フラグ
    • フラグgで置換前文字列に一致するものすべてを対象にする
    • フラグpで置換発生行だけを表示させる
    • 直前にm,nで範囲指定できす
  • sed拡張正規表現を使う場合は-rオプション
  • 後方参照は正規表現()でグループ化した際にそのマッチした文字列を\1などの数値で参照する機能
  • 区切り文字は/である必要はない。!%で代用できる。

awk

  • awk ’パターン{アクション}’ 対象ファイル
  • パターン {アクション}の部分をスクリプトという
  • フィールドは$で指定 。全指定の場合は$0
  • フィールド変数$NFはレコードのフィールド数=最終フィールドが代入されている
    • NFはこれまで読み込んだ入力レコード数が代入されている組み込み変数
  • アクション内で演算可能なため$NF-1=最後から2番めのフィールドなども出来る。
  • アクションを省略した場合は{print $0}が実行される
  • -Fで区切り文字を指定できる。-F ,とか。
  • ENDブロック内のアクションは処理がすべて終了後に実行される。

シェルスクリプト

  • #!シェル名を1行目で宣言=サブシェル
    • サブシェルには環境変数が引き継がれるがaliasなどは引き継がれない
  • source シェルスクリプトの場合はカレントシェルで実行されるため宣言不要
    • 実行権限付与も不要。
    • source.コマンドでもOK
    • サーチパスがデフォルト以外で必要なら$PATHに追加する必要がある
    • -u sourcepathでサーチパスからの検索を止める
  • シェルスクリプト相対パス絶対パスで指定する
  • 変数展開{$変数名}を使うのは変数展開して値を参照する時
  • =の前後にスペースは入れない
  • 変数名はa-zA-Z0-9_のみ。数字は頭に付けられない。

クォーティング

  • ’ ’は$は記号になる。$による変数展開をする場合は" "を使う
  • \ `=$( )

シェル引数

変数 内容
$0 実行時のシェルスクリプト
$1,$2... コマンドラインの引数の値(位置パラメータ)
$# 位置パラメータの個数
$@ 全ての位置パラメータ。""でそれぞれの位置パラメータが囲まれる
$# 全ての位置パラメータ。""で全体が1つの文字列として囲まれる

制御構造

if文

  • 条件文[ 条件文 ][]の前後にスペース必須。
    • [はシェル組み込み関数で最後の引数として]を受け取る
    • testコマンドもほぼ同じ機能
    • elif

評価演算子

演算子 内容
a1 = a2 a1とa2が等しい
a1 != a2 a1と12が等しくない
-n a1 a1が空文字列ではない
-z a1 a1が空文字列である

評価演算子(整数)

演算子 内容
a -eq b aとbが等しい
a -ne b aとbが等しくない
a -lt b aがbより小さい
a -le b aがb以下
a -gt b aがbより大きい
a -ge b aがb以上

結合演算子

演算子 内容
条件式1 -a 条件式2 条件式1と2の両方が真の場合に真(AND条件)
条件式1 -o 条件式2 条件式1と2の少なくとも1つが真の場合に真(OR条件)
!条件式 条件式の真偽を逆にする(NOT条件)
() 条件式をグループ化する

&&``||

  • コマンド1 && コマンド2
    • コマンド1の終了ステータスが0であればコマンド2を実行する
  • コマンド1||コマンド2
    • コマンド1の終了ステータスが0以外であればコマンド2を実行する

コマンドの終了ステータス

  • $?でコマンドの終了ステータス確認。正常終了=0、0以外はエラー。

for文

for 変数名 in リスト
do
    繰り返し処理
done
  • リストを変数に代入して繰り返し処理を行う構文
  • リストには$(コマンド)を使う事ができる
  • リストに"$@"を選択すると引数すべてが変数に代入される

case文

case 文字列 in
    パターン1 )
        処理1
        ;;
    パターン2 )
        処理2
        ;;
esac

while文

while コマンド
do
    繰り返し処理
done

bashの算術式展開

  • $((式))

シェル関数

関数名 () {
    処理
}
  • 関数名の前にfunctionが入るが省略する。
  • 処理を纏めたもの。
  • 位置パラメータ$1,$2...は関数への引数として利用できる

local

  • local 変数名=値
  • ローカル変数(=関数内でしか使えない関数)として宣言する

bashのパラメータ展開

記法 内容
${変数名#パターン} 最短マッチでパターンに前方一致した部分を取り除く
${変数名##パターン} 最長マッチでパターンに前方一致した部分を取り除く
${変数名%パターン} 最短マッチでパターンに後方一致した部分を取り除く
${変数名%%パターン} 最長マッチでパターンに後方一致した部分を取り除く