Open7

マスタリング Linux シェルスクリプト

ikeponikepon
  • ファイルは $HOME/bin で管理する
    • そのため、 $HOME/bin に PATH を通しておく
  • 作成したファイルを実行するために、作成ファイルを実行可能にしておく
chmod +x $HOME/bin/hello1.sh

# 以下で実行できる
hello1.sh
ikeponikepon
  • シバン: shebang
    • #!/bin/bash
      • システムのインタープリタにbashでスクリプトを実行するように指示している
  • exit 0
    • スクリプトを終了するために使われる
    • 0 以外のすべての値はスクリプト実行においてエラーが起こったことを表している
  • 上記を考えると、コマンドラインをうまく使うことができる
    • $ command1 || command2 があった場合
      • command1 が 0 以外を返す(失敗した)場合、command2 が実行される
    • $ command1 && command2 があった場合
      • command1 が 0 を返す(成功した)場合、command2 が実行される
    • $?
      • スクリプトの終了ステータスを表示
hello1.sh && echo $?
ikeponikepon
  • 引数の識別子
    • $0: スクリプト名
      • パスも表示されるので、スクリプト名だけを表示したい場合は basename $0
    • $1, $2, ...: 引数を取得
      • 2桁の場合は ${10} とかになる
    • $#: 引数の数
    • $*: すべての引数を参照
  • '"
    • ' は引数の $USER とかもそのまま文字列として反映する
    • " は引数の $USER を変数として中身を表示する
ikeponikepon
  • 変数
    • name="Test User"
      • = の前後に空白を入れない
        • 空白を入れるとコマンドとして解釈されてしまう
    • 定義時は $ なし
    • 使用時は $ あり
    • 配列も使える
      • array=(one two three four five)
      • ${array[1]}、すべての要素を表示する ${array[*]}
  • 環境変数
    • printenv で表示できる
ikeponikepon
  • 変数を別ファイルに渡したいとき
    • export を使う
name="TEST"
export name
./script2.sh # こっちのファイルで name を使える、変数はコピーされる、参照ではない
  • コマンド置換
    • コマンドの実行結果を変数に格納すること
cur_dir=`pwd`
   or
cur_dir=$(pwd)
ikeponikepon
  • read
    • 入力を受け取って $REPLY で表示する
#!/bin/bash
echo -n "Enter your name: "
read
echo "Hello $REPLY"
exit 0
ikeponikepon

ヒアドキュメント

# コメントみたいに使う
# << のあとに " なしだと変数とかコマンドを入れた場合に展開されるので注意が必要
: <<"END"
aaa
bbb
ccc
$(touch test.txt)
END