徒然なるままに

学習メモがメインです

ShellScript(Bash)の学習

ShellScript(Bash)について学習したのでそのメモ。

ShellScriptを学習する理由

windowのコマンドは業務で使ったことがあり、UNIX/Linuxのコマンドは基本的なコマンド(ls, cd, cat, mkdir, pwdなど)を理解している程度。今後業務で使う可能性が高いので学習する。

ShellScriptとは

UNIX/LinuxのOSでCUI操作する際に使うコマンドたちをスクリプトファイルにまとめたもの。Windowsだと.batファイルに該当する。

実行環境

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

学習内容

筆者がつまづいた点や気になった点を書き連ねる。 ※変数名は指定がない限りvarとしている。別の変数名でも問題ない。

ダブルクォーテーション(")とシングルクォーテーション(')の違い
ダブルクォーテーション(") シングルクォーテーション(')
変数や式の展開 展開できる 展開できない
エスケープ文字 ダブルクォーテーション(")はバックスラッシュ(\)でエスケープできる シングルクォーテーション(')はエスケープできない
リダイレクト
標準出力とエラー出力を同じファイルに出力
コマンド >> ファイル名 2>&1
標準出力エラー出力ともに握りつぶす場合
コマンド > /dev/null 2>&1
変数
変数にコマンド結果を代入
var=$(コマンド)

または

var=`コマンド`
変数にコマンドを代入して実行
var="コマンド"
${var}
配列
var=(1 2 g b)
echo ${var[2]} # g
echo {#var[@]} #

1行目: 配列作成 2行目: 指定した要素番号の値を表示。 3行目: 配列の要素数を表示

testコマンドは略式で記載可能

以下の二つのコマンドの意味は同じ。if文には後者が使われることが多いらしい。
ちなみに-fはファイルの存在チェックをするオプション。

test -f ファイル名
[-f ファイル名]
引数を取得
$1 $2 ... $n  # n個目の引数
$@ # 全ての引数(それぞれの引数にがダブルクォートで囲魔れる)
$* # 全ての引数(すべての引数がダブルクォートで囲まれる)
インクリメント(四則演算、数値計算
var=$(( var + 1 ))
findコマンド
ディレクトリを検索
find -type d -empty
検索する階層を指定
find -maxdepth N 

Nに数値を指定する。1ならカレントディレクトリのみ。

コンソール上で対話的に値を受け取る
read var
echo ${var} # コンソールで入力した値を表示
ランダム(乱数)
$RANDOM #0~32767までの数値をランダムで返す

参考にさせていただいたサイト