bash シェルスクリプト メモ

コメントは「#」,改行して記述の継続は「\」(バックスラッシュ).

「*.sh」ファイルの1行目

シバンというらしい.

#!/bin/bash

ここでインタプリタを定義するので,bashでない場合はそれに対応したコマンドを選択すれば良い(/bin/shとか/bin/fishとか).

引用符の区別

' (シングルクォート) 中身を文字列として扱う
" (ダブルクォート) 変数${PATH}などは展開する
` (バッククォート) 中身をコマンドとして実行し,その結果を返す

$ echo '$PATH'
 $PATH
$ echo "$PATH"
 /usr/local/bin:/usr/sbin: .....
$ ls -l `which git`
 -rwxr-xr-x 1 root root 2205840  m月 dd HH:MM /usr/bin/git

AND,OR表現

foo,barという2つの判定式があるとして,

  • AND
    if [ foo ] && [ bar ]; then
    if [ foo -a bar ]; then
  • OR
    if [ foo ] || [ bar ]; then
    if [ foo -o bar ]; then

変数$varが空かどうか確認

長さがゼロがどうかを判定するには「-z」で,ゼロでないかどうかの判定は「-n」.

if [ -z "$var" ]; then
  echo empty
fi

注意すべき点として,ダブルクォーテーション「""」を変数の両端に付さないと,変数が空の場合にエラーを返す.
また角括弧[]と内側の記述にはスペースを開けなければならない."[-z"というのは✕

変数の文字列置換

①: %, #

${var%/*} # ① "/" 以降を切り取り

②: %%, ##

${var##*/} # ② "/" 以前を切り取り

③:変数varに含まれるorgの文字列がnewに変わる.

${var//org/new} #③
# 例
$ var=abcdefg
$ echo ${var%d*}
abc
$ echo ${var#*d}
efg
$ echo ${var//abc/ABC}
ABCdefg

バックグラウンドのプロセスIDの表示

$!

で最後に実行したバックグラウンドプロセスのIDを示す.
psでたくさん出して絞り込むよりはこちらの方が楽.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-12-07 (Fri) 12:12:39 (1974d)