出力結果をlog.txtというテキストファイルに保存
./sysbackup.sh > log.txt
標準エラー出力もリダイレクト 「2>」が標準エラー出力のリダイレクトの指示
./sysbackup.sh > log.txt 2> err.txt
すべての出力をlog.txtに記録
./sysbackup.sh > log.txt 2>&1
長い文字列を出力する
#!/bin/sh
cat << EOS
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
...
■引数と変数
引数は、シェルスクリプトからは順番に$1、$2、$3、……として参照
引数の数は「$#」、
「$*」すべての引数を一度に参照
- 例
#!/bin/sh echo "Hi, $1. I am $0." echo "Hi, $*. I am $0."
- 結果
$ ./greeting.sh tom Hi, tom. I am ./greeting.sh. Hi, tom. I am ./greeting.sh. $ ./greeting.sh tom joe Hi, tom. I am ./greeting.sh. Hi, tom joe. I am ./greeting.sh. $ sh greeting.sh tom joe Hi, tom. I am greeting.sh. Hi, tom joe. I am greeting.sh.
シェルスクリプトでは「$」で始まる文字列を変数として扱います。
より正確にいうと、文字列が$で始まっている場合はその文字列に格納されたデータを取り出して置き換えます。
- 例
test=one echo $test
- 結果
$ sh var.sh one
シェルスクリプトでは基本的に変数を文字列として扱います。
- 例
test=1 test=$test+1 echo $test
- 結果
$ sh add.sh 1+1
変数を数値として扱いたいときは、declareコマンドで指定します。
「-i」で、整数値として処理することを指定する。
変数に何も代入されていない場合は、空の文字列が返ってきます。
- 例
declare -i test test=1 test=$test+1 echo $test
- 結果
$ bash add2.sh 2
■変数に対するパターンマッチ
${変数#パターン} 変数の内容について、最初の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。
${変数##パターン} 変数の内容について、最初の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。
${変数%パターン} 変数の内容について、最後の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。
${変数%%パターン} 変数の内容について、最後の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。
例) 変数testpathに/home/USER/Linux/how.to.linuxという値を設定しておくと、
$ echo ${testpath##/*/} how.to.linux $ echo ${testpath#/*/} USER/Linux/how.to.linux $ echo ${testpath%%.*} /home/USER/Linux/how $ echo ${testpath%.*} /home/USER/Linux/how.to
例)ファイル拡張子を置き換える
#!/bin/sh file=scan01.jpg echo ${file} echo ${file%jpg} echo ${file%jpg}png
外部ファイルにリストされた文字列を使ったスクリプト samp01.sh の 4行目の処理を変えることで、外部リストファイルの文字列を使った処理を自動的に行えます。
例)samp01.sh
#!/usr/bin/sh for fn in `cat list.txt` do touch $fn done echo "処理は終了しました。"
$ cat list.txt AAAAA.tmp BBBBB.tmp CCCCC.tmp DDDDD.tmp EEEEE.tmp FFFFF.tmp GGGGG.tmp
結果
$ chmod u+x samp01.sh $ samp01.sh 処理は終了しました。 $ ls AAAAA.tmp BBBBB.tmp CCCCC.tmp DDDDD.tmp EEEEE.tmp FFFFF.tmp GGGGG.tmp list.txt samp01.sh
コメント