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$