#!/bin/sh # #Bourne shscript Examples #By NOGUCHI Katsuyuki (ISAS) #Jun 02 2003 ver.1.0 #Sep 27 2003 ver.1.1 # #--- 引数チェック、格納。使用方法表示。 ### $#はコマンドラインに続く文字列の数。 ### 以下の例は、標準入力でデータを入力している(cat文) if [ $# != 3 ]; then echo "usage: cat DATAFILE | $0 ARGV1 ARGV2 ARGV3" 1>&2 exit 0 fi ARGV1=$1 ARGV2=$2 ARGV3=$3 #--- exec文。 #### 引数$1のファイルを標準入力に変更。read文での読み込みを可能にする exec 3<&0 <$1 #--- expr文 #### 整数計算 i=`expr 1 + 2 \* 3 + $j / 4 - 5` #--- ``文。各種コマンドの実行結果を変数に代入する #### 以下の例は、あるディレクトリにあるファイル数を調べる FILENUM=`ls $DIRNAME | wc | awk '{print $1}'` #--- while文による繰返し #### read文で標準入力からデータを一行ずつ読み込む while read COLUMN1 COLUMN2 COLUMN3 ; do echo "$COLUMN1 $COLUMN2 $COLUMN3" done #### 無限ループ、条件文でbreak while [ 0 -eq 0 ]; do echo "" if [ $i -gt 100 ]; then break fi done #### インクリメント(変数を1ずつ増やしていく)、awkの利用。 #### 以下の例では、必ずiが3桁になるように桁頭にゼロ付加をしている。 i=000 while [ $i -le $MAX ]; do echo "$i" 1>&2 i=`echo $i | awk '{printf("%03d",$1 + 1)}'` done #--- for文による繰返し #### 値の代入 for ARG in AAA BBB CCC ; do echo "$ARG" 1>&2 done #--- case文による場合分け #### FLGの値で判断。 case $FLG in 1 ) AAA=1 ; ;; 2 ) AAA=2 ; ;; 3 ) AAA=3 ; ;; esac #--- if文 #### ファイルの存在チェック if [ -f $FNAME ]; then echo "$FNAME がない" 1>&2 fi #### ディレクトリの存在チェック if [ ! -d $DIRNAME ]; then echo "$DIRNAME がない" 1>&2 fi #### AND条件文、else文 if [ -f $FNAME1 -a -f $FNAME2 ]; then echo "$FNAME1 と $FNAME2 がある" 1>&2 else echo "$FNAME1 か $FNAME2 がない" fi #### ディレクトリがない場合、親ディレクトリも含めて一気に生成(mkdir -pオプション) if [ ! -d $DIRNAME1 -o ! -d $DIRNAME2 ]; then echo "$DIRNAME1 か $DIRNAME2 がないので、生成" 1>&2 mkdir -p $DIRNAME1 $DIRNAME2 fi #### 文字列判断 if [ $ARG = "MOJI" ]; then echo "ARG is MOJI" 1>&2 fi #---シェル内でのgnuplot起動 #### EOF行までの間に空行を挟んではいけない。 gnuplot <