シェルスクリプト入門 その1 入力、出力、変数

はじめに

動機

シェルスクリプトを最近(ようやく?)、自分で書くようになってきました。 スクリプト言語と違うところ及び自分の頭の整理のために書いていきます。

シェルクスクリプトとは

シェルスクリプトとはunixコマンドを一つのファイルにまとめて実行するプログラムです。

利用シーン

  • ログファイルをリネームして移動したりする
  • VPSMacで作成したプログラム(rubypython)を定期的に実行 (cronと組み合わせる)
  • ...

などなど、使えると色々と便利なのは間違いありません!

入力、出力

とりあえず hello world

#!/bin/sh
echo "hello world" # hello world 

と書いて、実行すると、hello worldと出力されます!

$ sh hello.sh
$ hello world

重要なポイントは以下の点です。

  • 文頭に #!/bin/sh と記述。
  • シェルスクリプトunixコマンドが使える
    • 今回は echo を使用
  • コメントは # と記述した後に記述

標準入力、出力

  • read で値を標準入力
  • echoで値を出力します。
#!/bin/sh
read input 
echo "input=$input"
$ sh read.sh
$ hello
$ input=hello

といった形で標準入力、出力が行えます!

変数

重要なポイントは以下の通りです。

  • 変数に値を与える際、 variable=hoge といったようにスペースをつけない
  • 宣言した変数をアクセスする際は 先頭に$をつける。
  • readonly を用いると変数を上書きされない。
  • readonly を解除するには unsetを用いる。
#!/bin/sh
variable=hoge #スペースを入れない
echo $varible #変数にアクセスする際は$をつける
$ sh variable01.sh
$ hoge

また、readonlyと宣言すると、変数の上書きがされません。

#!/bin/sh
variable="変数"
echo "$variable"
readonly variable
variable="変更"
$ sh variable02.sh
$ 変数
$ variable02.sh: line 5: variable: readonly variable

特別な変数

個人的に使用頻度が高いと思われるものに絞ります。

  • $0 [スクリプト名]
  • $1 ~ $9 [引数をアクセス 数字は引数の順番を示す]
  • $$ [実行したプログラムのプロセスID]
#!/bin/sh
echo $0 #special_varable.sh
echo $1 #1つ目の引数を出力
echo $$ #プロセスIDを出力