(12回の9 練習課題について)
echo $1 $1 $1
スクリプトの例1(パイプラインバージョン):
ここではパラメータのチェックの例も示した (例2以降はその部分は省略する)
実は出力の最後に余計なスペースが入らないのは (複雑なプログラムにしない限り)この方法だけ。
:
if test -z "$2" -o $2 -le 0 ; then
echo "Usage: $0 STRING NUMBER" ; exit 1
fi # ここまでがパラメータ検査
echo $(yes "$1" | head -"$2")
スクリプトの例2(再帰呼び出しバージョン)
$0はこのスクリプトの(呼び出された時の)ファイル名なので、
sh $0 で再帰呼び出しができる ($2を1減らした値にして呼んでいる)
:
str=$1 n=$2 # 位置パラメータにわかりやすい変数名をつけてみる例
if test $n -le 0 ; then
echo
else
echo -n $str" "
sh $0 $str `expr $n - 1`
fi
スクリプトの例3(繰り返しバージョン)
:
str=$1 n=$2
while test $n -gt 0 ; do
echo -n $str" "
n=$(expr $n - 1)
done
echo
スクリプトの例:
:
for s ; do echo $s $s $s ; done
# for s in "$@" でもいいが in句は省略できる
Bashの場合、変数名の先頭または末尾の一部を取り除く記法がある。
s=11.txt
echo ${s}
echo ${s%.txt}
これを利用すると先の例は、以下のように書ける。
for i in *.txt ; do mv $i ${i%.txt} ; done
ただし:
Bashが高機能化して、コーディングは楽になっているが、
以下のことには留意しておく必要がある。
Perl, Python, Ruby などのスクリプト言語で同様のことが
(よりコンパクトな記法で)できるようになってきている
Unixの思想(軽量ツールの組み合わせで多くの機能を実現する)
とは反する方向性かもしれない。