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までの数値をランダムで返す
参考にさせていただいたサイト
- シェルスクリプト練習問題(入門編)の正解例と解説 | インフラ勉強wiki
- ShellScriptのダブルクォートとシングルクォートの違い - Qiita
- シェルの入出力制御あれこれ - Qiita
- シェルで変数のインクリメントに expr を使うと100倍遅い件 - Qiita
- findコマンドで検索する階層を指定(maxdepth) | ubuntu | マイノリティでいこう
- Linuxのシェルやコマンドにおけるバッククォートの使い方 | UX MILK
- 乱数を得る(bash) - あんみのの備忘録
- シェルスクリプトの基礎知識まとめ - Qiita
- bashでユーザのキーボード入力を対話的に受け取るbashスクリプト - Qiita
- bash > 乱数を得る > シェル変数RANDOMを使う - Qiita