神戸学院大学 経営学部 林坂ゼミ

CLI 入門トップページ

« 戻る 次へ »

Bash

スクリプトの実行

変数の利用

Bash では変数を利用することができます.変数は「$変数名」で参照します.まだ,「NAME」という変数は定義されていないので,次のような結果になります.

rinsaka@ubuntu:~/Documents/work$ echo "Hello $NAME!" ⏎
Hello !
rinsaka@ubuntu:~/Documents/work$

変数「Name」に文字列を代入して,その内容と共に文字列を画面に表示します.

rinsaka@ubuntu:~/Documents/work$ NAME="Koichiro" ⏎
rinsaka@ubuntu:~/Documents/work$ echo "Hello $NAME!" ⏎
Hello Koichiro!
rinsaka@ubuntu:~/Documents/work$

変数の境界をはっきりさせるために { } で囲って,${NAME} のように指定することがよく行われます.

rinsaka@ubuntu:~/Documents/work$ echo "Hello ${NAME}!" ⏎
Hello Koichiro!
rinsaka@ubuntu:~/Documents/work$

定義済みの変数を一覧で表示するには set コマンドを利用します.

rinsaka@ubuntu:~/Documents/work$ set ⏎
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:login_shell:patsub_replacement:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
... (以下略) ...
rinsaka@ubuntu:~/Documents/work$

相当数の変数が表示されるので確認したい内容を grep コマンドで検索すると良いでしょう

rinsaka@ubuntu:~/Documents/work$ set | grep NAME⏎
LOGNAME=rinsaka
NAME=Koichiro
USERNAME=rinsaka
XPC_SERVICE_NAME=0
rinsaka@ubuntu:~/Documents/work$

変数の内容を削除するには「unset」を利用します.

rinsaka@ubuntu:~/Documents/work$ unset NAME ⏎
rinsaka@ubuntu:~/Documents/work$ echo "Hello ${NAME}!" ⏎
Hello !
rinsaka@ubuntu:~/Documents/work$

もう一度変数の一覧を表示して変数が削除されたことを確認します.

rinsaka@ubuntu:~/Documents/work$ set | grep NAME⏎
LOGNAME=rinsaka
USERNAME=rinsaka
XPC_SERVICE_NAME=0
rinsaka@ubuntu:~/Documents/work$

目次に戻る

特殊な環境変数

Bashには特殊な環境変数もあります.例えば「PWD」は「現在のワーキングディレクトリの絶対パス(Present Working Directory)」を返す特殊な環境変数です.

rinsaka@ubuntu:~/Documents/work$ echo ${PWD} ⏎
/home/rinsaka/Documents/work
rinsaka@ubuntu:~/Documents/work$

目次に戻る

スクリプト

vi (vim) エディタやVisual Studio Codeなどのテキストエディタで次のようなスクリプトを作成して保存します.このとき,拡張子には「.sh」を使用します.

hello.sh
#!/bin/bash

NAME="Taro"
echo "Hello $NAME!"

「hello.sh」ファイルが保存されていることを確認します.ただし,「hello.sh」ファイルには実行権限「x」が付与されていないので,そのままでは実行できません.

rinsaka@ubuntu:~/Documents/work$ ls -l ⏎
total 8
-rw-rw-r-- 1 rinsaka rinsaka  45 Aug  3 02:38 hello.sh
-rw-rw-r-- 1 rinsaka rinsaka 369 Aug  3 01:59 test1.txt
rinsaka@ubuntu:~/Documents/work$

次のコマンドを用いてファイルに実行権限を付与します.

rinsaka@ubuntu:~/Documents/work$ chmod +x hello.sh ⏎
rinsaka@ubuntu:~/Documents/work$

実行権限が付与されたことが確認できました.

rinsaka@ubuntu:~/Documents/work$ ls -l ⏎
total 8
-rwxrwxr-x 1 rinsaka rinsaka  45 Aug  3 02:38 hello.sh
-rw-rw-r-- 1 rinsaka rinsaka 369 Aug  3 01:59 test1.txt
rinsaka@ubuntu:~/Documents/work$

スクリプトを実行するにはファイル名の先頭に「./」を付与します.

rinsaka@ubuntu:~/Documents/work$ ./hello.sh ⏎
Hello Taro!
rinsaka@ubuntu:~/Documents/work$

条件分岐は次のような感じになります.なお,-ge は以上 (Grater than or Equal to) を意味します.

age.sh
#!/bin/bash

age=20
if [[ $age -ge 18 ]]; then
  echo "成人"
else
  echo "未成年"
fi
rinsaka@ubuntu:~/Documents/work$ ./age.sh ⏎
成人
rinsaka@ubuntu:~/Documents/work$

配列も利用してみましょう.

fruits.sh
#!/bin/bash

# 配列
items=("apple" "banana" "orange")
# ループ
for item in "${items[@]}"; do
  echo "果物:$item"
done
rinsaka@ubuntu:~/Documents/work$ ./fruits.sh ⏎
果物:apple
果物:banana
果物:orange
rinsaka@ubuntu:~/Documents/work$

目次に戻る