Linux講座にようこそ。このページは「Linuxの使い方 - 第6章 シェルスクリプトの作り方」です。
forコマンドは先頭で変数に値を設定しつつ繰り返します。設定する値が無くなったら繰り返しを終了します。
変数には形式1の場合はin以降で指定した値が、形式2の場合は位置パラメータの値が設定されます。
ディレクトリの絶対パス名を記述したファイル(ディレクトリ・リスト)を入力し、そのディレクトリが存在するかをチェックします。(ex53.sh)
#!/bin/bash # 機能 : ディレクトリの絶対パス名を記述したファイルを入力し、 # そのディレクトリが存在するかをチェックします # 作成 : メリー dirlist_path=${1:?"ディレクトリ・リストの指定がありません。中止します。"} # ディレクトリ・リストの有無をチェック if [[ ! -f "$dirlist_path" ]] then echo "${dirlist_path}がありません。中止します。" exit 1; fi for path in $(cat $dirlist_path) # pathにはcatコマンドの実行結果が順番に設定される do # ディレクトリとして存在するかをチェック if [[ -d "$path" ]] then echo "${path}はディレクトリとして存在します。" else echo "${path}はディレクトリとして存在しません。" fi done
$ cat ./mybin/ex53_1.conf ← ディレクトリ・リストの内容を表示します /home/merry/TMP/WORK /home/merry/TMP/DUMMY /home/merry/TMP/PHOTO $ $ ex53.sh ./mybin/ex53_1.conf /home/merry/TMP/WORKはディレクトリとして存在します。 /home/merry/TMP/DUMMYはディレクトリとして存在しません。 /home/merry/TMP/PHOTOはディレクトリとして存在します。 $
引数に指定されたディレクトリが存在するかをチェックします。(ex54.sh)
#!/bin/bash # 機能 : 引数に指定されたディレクトリが存在するかをチェックします # 作成 : メリー # 引数の有無をチェック if (( $# == 0 )) then echo "ディレクトリの指定がありません。中止します。" exit 1; fi for path # pathには引数に指定された値が順番に設定される do # ディレクトリとして存在するかをチェック if [[ -d "$path" ]] then echo "${path}はディレクトリとして存在します。" else echo "${path}はディレクトリとして存在しません。" fi done
$ ls -l 合計 12 drwxr-xr-x 2 merry merry 4096 12月 7 09:12 'My Documents' drwxr-xr-x 2 merry merry 4096 12月 7 09:13 'Program Files' drwxr-xr-x 2 merry merry 4096 12月 7 09:22 SCRIPT $ $ ex54.sh ← 引数を指定しません ディレクトリの指定がありません。中止します。 $ $ ex54.sh ./SCRIPT ./SCRIPT/ex01.sh My Documents 'My Documents' ← パス名を複数指定します ./SCRIPTはディレクトリとして存在します。 ./SCRIPT/ex01.shはディレクトリとして存在しません。 Myはディレクトリとして存在しません。 Documentsはディレクトリとして存在しません。 My Documentsはディレクトリとして存在します。 $
whileコマンドとuntilコマンドは繰り返しを制御します。whileコマンドは条件が成立(真)の間繰り返します。それに対して、untilコマンドは条件が不成立(偽)の間繰り返します。これらのコマンドで繰り返しの処理をする場合は、次のことに注意する必要があります。
whileコマンドで繰り返し四則演算を行います。(ex55.sh)
#!/bin/bash # 機能 : 繰り返し四則演算を行います # 作成 : メリー cont="y" while [[ "$cont" = "y" ]] || [[ "$cont" = "Y" ]] do echo -e "(+)加算\n(-)減算\n(*)乗算\n(/)除算" read -p "演算子を入力して下さい --> " enzansi if [[ -n "$enzansi" ]] then read -p "数値を2つ入力して下さい --> " atai1 atai2 if [[ -n "$atai1" ]] && [[ -n "$atai2" ]] then case "$enzansi" in '+' ) echo "$atai1 + $atai2 = " $(( $atai1 + $atai2 ));; '-' ) echo "$atai1 - $atai2 = " $(( $atai1 - $atai2 ));; '*' ) echo "$atai1 * $atai2 = " $(( $atai1 * $atai2 ));; '/' ) echo "$atai1 / $atai2 = " $(( $atai1 / $atai2 ));; * ) echo "演算子が不当です";; esac else echo "数値が入力されませんでした" fi else echo "演算子が入力されませんでした" fi read -p "計算を続けますか(y/n) ---> " cont # 条件を変える done echo "終了します"
$ ex55.sh (+)加算 (-)減算 (*)乗算 (/)除算 演算子を入力して下さい --> + 数値を2つ入力して下さい --> 10 20 10 + 20 = 30 計算を続けますか(y/n) ---> y ← "y"を入力して繰り返します (+)加算 (-)減算 (*)乗算 (/)除算 演算子を入力して下さい --> - 数値を2つ入力して下さい --> 10 10 10 - 10 = 0 計算を続けますか(y/n) ---> Y (+)加算 (-)減算 (*)乗算 (/)除算 演算子を入力して下さい --> * 数値を2つ入力して下さい --> 10 -10 10 * -10 = -100 計算を続けますか(y/n) ---> n ← "n"を入力して終了します 終了します $
untilコマンドで繰り返し四則演算を行います。(ex56.sh)
#!/bin/bash # 機能 : 四則演算を行います # 作成 : メリー cont="y" until [[ $cont = "n" ]] || [[ $cont = "N" ]] do (以下省略)